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队列,并将参数存储为挂起的作业。这是用于测试用例和实际分析的作业。。。