【问题标题】:How can I make sure that two function calls are always made consecutively with multiple threads in Python?如何确保 Python 中的多个线程始终连续进行两个函数调用?
【发布时间】:2017-05-09 19:11:46
【问题描述】:

我正在使用这样的 Pathos:

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

Pool().map(foo, data)

我希望fn1fn2 作为一个原子操作执行,这样没有线程可以像fn1, fn1, fn2, fn2 这样的顺序产生函数调用。

【问题讨论】:

标签: python multithreading pathos


【解决方案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])

但是,如果您不想并行调用函数,为什么还要使用多处理?

【讨论】:

  • 拜托,不是 OP 没有使用 Python 的多处理,而是 pathos 项目:trac.mystic.cacr.caltech.edu/project/pathos/wiki.html
  • 嗨,我是pathos 作者。有一个很好的中间地带...如果您使用multiprocess 而不是multiprocessing。这是pathos 在幕后使用的库,它提供与multiprocessing 完全相同的接口。因此,如果您使用 pathos 并将其与 multiprocess 中的真正不同接口相结合,它是完全兼容的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多