我在Windows上使用Python 2.7上的multiprocessing
模块,并且我有多个进程将数据放在共享队列上并将数据从共享队列中取出。我正在继承multiprocessing.Process
来完成此操作,并将由multiprocessing.Manager()
作为参数的队列代理作为参数传递给__init__
。在,所以我见过的人其他的答案通过此队列代理到map_async
作为参数,但是当我试图把它作为参数传递给__init__
方法我得到的错误:多处理。使用共享队列的进程子类
TypeError: Pickling an AuthenticationString object is disallowed for security reasons
所以我很理解在Windows上通过实例化的东西Process
子类必须是可以使用的,并且需要在这些共享对象上有一个authkey(这可以防止酸洗)。但为什么你可以给这个队列代理map_async
而不是Process
的子类?除了重写我的Process
子类作为函数之外,是否还有其他解决方法?
所以我最初在Linux上使用这个代码,并没有使用'multiprocessing.Queue'的问题。当我在Windows上运行这段代码时,它给了我一个错误,指出队列只能通过继承来共享,所以我认为我可以共享队列代理(显然不是)。我不清楚究竟我该如何从队列中继承 - 每个“Process”实例如何共享? – thyme
你基本上回答了我的问题,只是好奇而已。 – thyme
实际上,看一下直接使用文档中的'Manager'的例子,我并不清楚该例子是如何工作的。当我在之前(在Windows上)使用'multiprocess.Queue'时,在创建'Process'时,我只是在'args'中提供了它。你有什么特别的错误? –