我正在尝试调用一个带有内部apply_async函数的池,当我试图将一个函数传递给另一个函数的池时,我得到了序列化对象的错误,所以我将第二个池移动到全局,但它仍然不能为我工作,我遗漏了什么?我的代码:
from multiprocessing import Pool
b_pool = Pool(1)
def func_a(i):
global b_pool
print "a : {}".format(i)
try:
res = b_pool.apply_async(func_b, args=(i,))
except Exception as e:
print e
def func_b(i):
print "b : {}".format(i)
file = "/home/ubuntu/b_apply.txt"
f = open(file, "a")
f.write("b : {}".format(i))
f.close()
if __name__ == '__main__':
a_pool = Pool(1)
for i in range(10):
res = a_pool.apply_async(func_a,args=(i,) )
a_pool.close()
a_pool.join()
b_pool.close()
b_pool.join()
在这段代码中,只有a打印0 -9,b甚至不打印到文件。我使用的是python 2.7
发布于 2019-07-19 13:55:53
队列是好方向,只是multiprocessing.Queue不能像这样传递,但Manager.Queue是完成此操作的正确方法,我的代码工作正常:
from multiprocessing import Pool,Manager
def func_a(i,q):
print "a : {}".format(i)
try:
q.put(i)
except Exception as e:
print e
def func_b(i,q):
i = q.get()
print "b : {}".format(i)
if __name__ == '__main__':
m = Manager()
q = m.Queue()
a_pool = Pool(1)
b_pool = Pool(1)
for i in range(10):
res = a_pool.apply_async(func_a,args=(i,q,) )
res_2 = b_pool.apply_async(func_b, args=(i,q,))
a_pool.close()
a_pool.join()
b_pool.close()
b_pool.join()
https://stackoverflow.com/questions/57095116
复制相似问题