import time
import multiprocessing
def multi_thread(files):
q = multiprocessing.Queue()
for f in files:
q.put(f)
p = multiprocessing.Pool(5)
for i in range(5):
p.apply_async(worker_test, args=(q,))
p.close()
p.join()
def worker_test(i):
print 'hello'
print i
def main():
files = ['a', 'b', 'c', 'd']
multi_thread(files[0:4])
print 'Multi-thread time: {0} seconds'.format(time.time() - t0)
if __name__ == '__main__':
main()
如果我传入work_test()
,我的代码甚至不会输入hello
功能来打印q
。但是,如果我将q
更改为i
,则代码运行正常。不知怎的,它不喜欢multiprocessing.Queue()
对象 - 任何想法发生了什么?
答案 0 :(得分:1)
您需要创建一个可以在不同进程之间共享的队列实例。您可以使用multiprocessing.Manager对象执行此操作。
以下代码似乎有效:
import time
import multiprocessing
def multi_thread(files):
m = multiprocessing.Manager()
q = m.Queue()
for f in files:
q.put(f)
p = multiprocessing.Pool(5)
for i in range(5):
p.apply_async(worker_test, args=(i, q))
p.close()
p.join()
def worker_test(i, q):
print 'hello'
print i
def main():
files = ['a', 'b', 'c', 'd']
multi_thread(files[0:4])
if __name__ == '__main__':
main()