首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多处理队列的多处理apply_async奇怪行为

具有多处理队列的多处理apply_async奇怪行为
EN

Stack Overflow用户
提问于 2015-02-05 07:09:07
回答 1查看 986关注 0票数 1
代码语言:javascript
复制
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()对象--有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 07:20:58

您需要创建一个可以在不同进程之间共享的队列实例。您可以通过使用multiprocessing.Manager对象来完成这一任务。

以下代码似乎有效:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28338099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档