相关疑难解决方法(0)

当作为参数传递给 multiprocessing.Process 时,multiprocessing.Queue 实例如何序列化?

相关问题出现在Why I can't use multiprocessing.Queue with ProcessPoolExecutor? 。我提供了部分答案以及解决方法,但承认这个问题引发了另一个问题,即为什么可以multiprocessing.Queue将实例作为参数传递给辅助函数。multiprocessing.Process

例如,以下代码在使用spawnfork方法创建新进程的平台下会失败:

from multiprocessing import Pool, Queue

def worker(q):
    print(q.get())

with Pool(1) as pool:
    q = Queue()
    q.put(7)
    pool.apply(worker, args=(q,))
Run Code Online (Sandbox Code Playgroud)

上述提出:

RuntimeError: Queue objects should only be shared between processes through inheritance

但下面的程序运行没有问题:

from multiprocessing import Process, Queue

def worker(q):
    print(q.get())

q = Queue()
q.put(7)
p = Process(target=worker, args=(q,))
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)

看来,多处理池工作函数的参数最终会放在池的输入队列上,该队列是作为 a 实现的,multiprocessing.SimpleQueue并且您不能将实例放入使用 a进行序列化的实例中。multiprocessing.Queuemultiprocessing.SimpleQueueForkingPickler

那么,multiprocessing.Queue当作为参数传递给 a …

python queue multiprocessing

6
推荐指数
1
解决办法
1387
查看次数

标签 统计

multiprocessing ×1

python ×1

queue ×1