병렬 "일반"파이썬 함수에서 실행하는 데 사용할 수있는 "블랙 박스"도구를 찾기 전에 my_function()
손으로 병렬화 하는 방법을 분석하는 것이 좋습니다 .
먼저, 실행 시간 my_function(v)
을 파이썬 for
루프 오버 헤드 와 비교하십시오 . [C] Python for
루프는 매우 느리기 때문에 시간을 my_function()
무시할 수 있습니다.
>>> timeit.timeit('pass', number=1000000)
0.01692986488342285
>>> timeit.timeit('for i in range(10): pass', number=1000000)
0.47521495819091797
>>> timeit.timeit('for i in xrange(10): pass', number=1000000)
0.42337894439697266
my_function(v)
루프를 필요로하지 않는 간단한 벡터 구현이 있는지 두 번째 확인하십시오 .F[:] = my_vector_function(X)
(이 두 가지 첫 번째 요점은 매우 사소한 것입니다. 완전성을 위해 여기에 언급했다면 용서하십시오.)
적어도 CPython 구현에서 세 번째이자 가장 중요한 점 my_function
은 대부분의 시간을 전역 인터프리터 잠금 또는 GIL 내부 또는 외부 에서 보내는 지 확인하는 것 입니다. GIL 외부에서 시간이 소요되면 표준 라이브러리 모듈을 사용해야합니다. ( 여기 예). BTW, GIL을 릴리스하기 위해 C 확장 으로 작성 하는 것을 생각할 수 있습니다.threading
my_function()
마지막으로 my_function()
GIL을 해제하지 않으면 multiprocessing
모듈을 사용할 수 있습니다 .
참조 : 동시 실행에 대한 Python 문서 및 병렬 처리에 대한 numpy / scipy 소개 .