2010-01-20 4 views
3

고객이 이미지를 업로드 한 후 이미지를 8 가지 크기로 다시 크기를 정한 다음 S3까지 보내고 파일 시스템에 저장하려고합니다. 분명히이 작업은 오랜 시간 (초) 걸릴 수 있으며 "다중 스레드"방식으로 수행하고 싶습니다 (실제로 다중 스레드인지 또는 다른 기능인지 여부를 신경 쓰지 않기 때문에 인용합니다). 제 이해는 파이썬의 GIL 덕분에 같은 프로세스를 사용하므로 코드의 정상적인 플로우 (대 멀티 스레딩)에서 수행 한 것과 똑같이 작동하기 때문에 이런 식으로 멀티 스레딩을 성공적으로 사용할 수 없다는 것입니다. 이런 종류의 작업을 위해 파이썬에서 새로운 프로세스를 여는 다른 방법이 있습니까?Django/Python : 파이썬에서 어떻게 새로운 프로세스를 시작하나요?

+1

모두 중복 : http://stackoverflow.com/search?q=%5Bpython%5D+subprocess+django. 특히 this : http://stackoverflow.com/questions/1619397/how-to-start-a-long-running-process-from-django-view –

+0

이러한 게시물은 도움이되지 않습니다. 대부분의 대답은 하위 프로세스를 사용하여 언급합니다. 하위 프로세스는 하위 프로세스로 해결할 수있는 대규모 IO 문제가있는 경우를 제외하고 코드를 복잡하게하는 것 외에는 아무에게도 유용하지 않습니다. Google "Python GIL의 문제점" – orokusaki

+0

"아무에게도 아무 것도 유용하지 않는 하위 프로세스". 그러나 당신은 "서브 프로세스"로 답변을 수락했습니다. 나는 대답을 받아 들일 수있는 대답과 섞이지 않았다. –

답변

2

외부 프로세스를 호출하려면 subprocess 모듈을 사용하십시오.

한편, GIL을 사이드 스텝 처리하고 파이썬 태스크를 회전 시키려면 multiprocessing 모듈을 사용하십시오. threading 패키지와 매우 흡사 한 인터페이스를 제공하지만 서브 프로세스를 사용하므로 GIL의 제약 조건에 구속받지 않습니다.

+1

하위 프로세스 (즉, 외부 프로세스는 무엇입니까?)를 사용하는 이유는 무엇입니까? – orokusaki

+0

@orokusaki : 일부 외부 유틸리티 인 EG를 사용하여 파일을 처리하고 싶은데 비디오를 처리하고 ffmpeg에서 코드 변환을 원한다고 가정하면이 경우 서브 프로세스 모듈을 사용하여 ffmpeg를 실행하고 입력 내용을 파이프 처리합니다 데이터를 처리하고 처리 된 데이터를 가져 오기 위해 출력을 읽습니다. 그러나 GIL의 영향을받지 않고 장기간 실행되는 Python 루틴을 실행하는 것이 원하는 경우 다중 처리 패키지가 원하는 것입니다. – jkp

관련 문제