首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在apply async python函数中调用apply async

在apply async python函数中调用apply async
EN

Stack Overflow用户
提问于 2019-07-18 21:02:20
回答 1查看 72关注 0票数 0

我正在尝试调用一个带有内部apply_async函数的池,当我试图将一个函数传递给另一个函数的池时,我得到了序列化对象的错误,所以我将第二个池移动到全局,但它仍然不能为我工作,我遗漏了什么?我的代码:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-19 13:55:53

队列是好方向,只是multiprocessing.Queue不能像这样传递,但Manager.Queue是完成此操作的正确方法,我的代码工作正常:

代码语言:javascript
运行
复制
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()

这个答案Sharing a result queue among several processes非常有帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57095116

复制
相关文章

相似问题

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