2017-05-09 11 views
0

나는이 같은 애수를 자아내는 가락을 사용하고 있습니다 :파이썬에서 두 개의 함수 호출이 항상 여러 스레드로 연속적으로 만들어 지도록하려면 어떻게해야합니까?

from pathos.multiprocessing import ProcessingPool as Pool 
def foo(bar): 
    fn1(bar) 
    fn2(bar) 

Pool().map(foo, data) 

나는 fn1을 원하고 fn2 어떤 스레드 기능이 fn1, fn1, fn2, fn2 같은 순서로 호출을 생성 할 수 있도록 하나 개의 원자 작업으로 실행 할 수 있습니다.

+0

https://docs.python.org/3/library/multiprocessing.html#synchronization-between-processes –

답변

1

documentation에 설명 된 것과 같이 잠금 장치를 사용해야합니다.

def foo(lock, bar): 
    lock.acquire() 
    try: 
     fn1(bar) 
     fn2(bar) 
    finally: 
     lock.release() 

if __name__ == '__main__': 
    lock = Lock() 
    Pool().map(foo, [(l, d) for d in data]) 

그러나 병렬 처리를 사용하지 않으려면 왜 멀티 프로세싱을 사용하고 있습니까?

+0

OP는 파이썬의 멀티 프로세싱이 아니라, pathos 프로젝트 (http : // trac)를 사용합니다. mystic.cacr.caltech.edu/project/pathos/wiki.html – jsbueno

+0

안녕하세요 저는'pathos' 저자입니다. 멀티 프로세싱 대신 멀티 프로세싱을 사용하면 좋은 중간계가됩니다. 이것은'pathos'가 커버하에 사용하는 라이브러리이며,'multiprocessing'과 똑같은 인터페이스를 제공합니다. 그래서,'pathos'를 사용하고'multiprocess'에서 다른 인터페이스가 실제로 결합되어 있다면, 그것은 완벽하게 호환됩니다. –