3

我的问题是:

我有 3 个 procs 想要共享从同一个类和几个队列加载的配置。我想生成另一个 proc 作为 multiprocessing.manager 来分享这些信息。

我怎样才能做到这一点?有人可以购买避免使用全局变量并使用多处理管理器类的示例代码吗?

Python 文档不是很有帮助:-(

4

1 回答 1

3

我发现Python 多处理文档中的这个特定部分很有帮助。以下程序:

from multiprocessing import Process, Queue, current_process
import time

def f(q):
    name = current_process().name
    config = q.get()
    print "%s got config: %s" % (name, config)
    print "%s beginning processing at %s" % (name, time.asctime())
    time.sleep(5)
    print "%s completing processing at %s" % (name, time.asctime())

if __name__ == '__main__':
    q = Queue()
    processes = []
    cfg = { 'my' : 'config', 'data' : 'here' }
    for i in range(3):
        p = Process(target=f, args=(q,))
        processes.append(p)
        p.start()
        q.put(cfg)

    for p in processes:
        p.join()

演示主脚本(即您问题中的“多处理管理器”)创建 3 个进程并向每个进程发送一个配置(此处显示为字典)。

每个进程读取配置,进行处理(这里,只是休眠 5 秒)然后终止。运行此脚本的输出是:

Process-1 got config: {'my': 'config', 'data': 'here'}
Process-1 beginning processing at Tue Jun 23 23:34:23 2009
Process-2 got config: {'my': 'config', 'data': 'here'}
Process-2 beginning processing at Tue Jun 23 23:34:23 2009
Process-3 got config: {'my': 'config', 'data': 'here'}
Process-3 beginning processing at Tue Jun 23 23:34:23 2009
Process-1 completing processing at Tue Jun 23 23:34:28 2009
Process-2 completing processing at Tue Jun 23 23:34:28 2009
Process-3 completing processing at Tue Jun 23 23:34:28 2009
于 2009-06-23T22:36:17.813 回答