我试图了解如何在Python中使用多处理模块。下面的代码产生四个进程,并在结果可用时输出结果。在我看来,必须有一个更好的方法来从队列中获得结果;某些方法不依赖于计算Queue包含的项目数,而只是在项目可用时返回项目,然后在队列为空时正常退出。文档说Queue.empty()方法不可靠。有没有更好的替代方法来消耗队列中的结果?
import multiprocessing as mp
import time
def multby4_wq(x, queue):
print "Starting!"
time.sleep(5.0/x)
a = x*4
queue.put(a)
if __name__ == '__main__':
queue1 = mp.Queue()
for i in range(1, 5):
p = mp.Process(target=multbyc_wq, args=(i, queue1))
p.start()
for i in range(1, 5): # This is what I am referring to as counting again
print queue1.get()
答案 0 :(得分:2)
如何使用Pool?
而不是使用队列例如,
import multiprocessing as mp
import time
def multby4_wq(x):
print "Starting!"
time.sleep(5.0/x)
a = x*4
return a
if __name__ == '__main__':
pool = mp.Pool(4)
for result in pool.map(multby4_wq, range(1, 5)):
print result
假设您有一个接受多个参数的函数(在此示例中为add
)。创建一个包装函数,将参数传递给add
(add_wrapper
)。
import multiprocessing as mp
import time
def add(x, y):
time.sleep(1)
return x + y
def add_wrapper(args):
return add(*args)
if __name__ == '__main__':
pool = mp.Pool(4)
for result in pool.map(add_wrapper, [(1,2), (3,4), (5,6), (7,8)]):
print result