Python 多处理:长时间运行与短时间运行的工人

Python 多处理:长时间运行与短时间运行的工人,python,multiprocessing,python-multiprocessing,Python,Multiprocessing,Python Multiprocessing,我正在尝试使用分布式队列进行多处理。是否有理由选择run而不是run2?我的感觉是run2的性能稍微好一点,因为它没有将控制权返回到主进程的开销 from multiprocessing import Pool from foo import my_distributed_queue as queue def process_msg(msg): foo(msg) def run(): pool = Pool(4) for msg in queue: pool.apply_

我正在尝试使用分布式队列进行多处理。是否有理由选择
run
而不是
run2
?我的感觉是
run2
的性能稍微好一点,因为它没有将控制权返回到主进程的开销

from multiprocessing import Pool
from foo import my_distributed_queue as queue

def process_msg(msg):
  foo(msg)

def run():
  pool = Pool(4)
  for msg in queue:
    pool.apply_async(process_msg, (msg, ))

def process_msg2():
    for msg in queue:
      foo(msg)

def run2():
  pool = Pool(4)
  for i in range(4):
      pool.apply_async(process_msg2, ())

if __name__ == '__main__'
  run()
  #run2()

我相信
run2()
只会产生一个工人。。。(编辑*事实上我很自信)@Aaron接得好。我一直在修正,我不确定这里是否有明确的答案。。使用
run2
从多个源访问队列可能会有更多的开销(这需要一些我在这里没有看到的互斥)。尽管它会再次分散在多个核心上,至少在接收端是这样。另一方面,您可能会使用
run
使队列饥饿,因为它可能会尝试以尽可能快的速度耗尽任何iterable队列,并将参数存储为挂起的作业。这是用于测试用例和实际分析的作业。。。