2017-05-09 4 views
0

Ich bin mit Pathos wie folgt aus:Wie kann ich sicherstellen, dass zwei Funktionsaufrufe immer hintereinander mit mehreren Threads in Python gemacht werden?

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

Pool().map(foo, data) 

Ich möchte fn1 und fn2 als eine atomare Operation ausgeführt werden, so dass keine Threads Funktionsaufrufe in einer Sequenz wie fn1, fn1, fn2, fn2 produzieren kann.

+0

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

Antwort

1

Sie müssen ein Schloss verwenden, wie es in der documentation beschrieben ist.

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]) 

Aber warum verwenden Sie Multiprocessing, wenn Sie Ihre Funktion nicht parallel aufrufen möchten?

+0

Bitte nicht das OP verwendet nicht Pythons Multiprocessing, sondern das Pathos-Projekt: http: // trac. mystic.cacr.caltech.edu/project/pathos/wiki.html – jsbueno

+0

Hallo ich bin der 'Pathos' Autor. Es gibt einen schönen Mittelweg ... wenn Sie 'multiprocess' anstelle von' multiprocessing' verwenden. Dies ist die Bibliothek, die 'pathos' unter den Deckeln verwendet, und sie bietet genau die gleiche Schnittstelle wie' multiprocessing'. Also, wenn Sie 'pathos' verwenden und es mit wirklich kombinieren, was nur eine andere Schnittstelle in' multiprocess' ist, ist es voll kompatibel. –

Verwandte Themen