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()对象--有什么想法吗?
发布于 2015-02-05 07:20:58
您需要创建一个可以在不同进程之间共享的队列实例。您可以通过使用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()https://stackoverflow.com/questions/28338099
复制相似问题