【发布时间】:2014-05-28 22:59:27
【问题描述】:
我有以下问题: 我和许多工人一起经营芹菜。在 celery 启动期间,我创建了几个子进程:
proc = subprocess.Popen("program", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
我需要这些子流程来启动并供芹菜工人稍后使用(重复地)。所以我将子进程保存到 multiprocessing.Manager().dict() - 类似于 pool...
pool = multiprocessing.Manager().dict()
pool[proc_id] = proc
芹菜工人可以访问所有子进程,但它们不起作用 - 当子进程通过池共享时,我发现管道瞬间损坏。 所以第一个问题:有没有机会在另一个进程(芹菜工人)之间共享子进程管道?
我还尝试将管道保存到单独的常规字典中。然后当工作者从池中获取子进程时,这些管道被连接到子进程:
proc.stdin = dict_of_pipes[proc_id]
此解决方案有时有效,但有时在字典中找不到管道 - 我怀疑是因为在进程之间共享常规字典不行吗?
作为“程序”你可以想象 /bin/bash.锁定已解决,字典一次不会被超过 1 个进程访问...
第二个问题 - 是否可以为子进程打开新管道? (来自任何芹菜工人?)或其他解决方案?
【问题讨论】:
标签: python subprocess ipc celery