Python 使用 (LIFO) 队列进行多处理

Python Multiprocessing With (LIFO) Queues

我正在尝试在 Python 中使用多处理来让函数在循环中不断被调用,然后从函数中访问最新的 return 值(通过将值存储在后进先出队列)。

这是主程序的代码片段

q = Queue.LifoQueue()
while True:
   p = multiprocessing.Process(target=myFunc, args = (q))
   p.daemon = True
   p.start()
   if not q.empty():
      #do something with q.get()

这是来自 myFunc

的代码片段
def myFunc(q):
    x = calc()
    q.put(x)

问题是,主循环认为 q 是空的。但是,我检查了 myFunc() 是否将值放入 q(通过在 q.put(x) 之后放置 q.empty() 检查)并且队列不应该为空。

我该怎么做才能让主循环看到队列中的值?还是我正在以一种低效的方式解决这个问题? (我确实需要 myFunc 和主循环 运行 分开,因为 myFunc 有点慢,主循环需要继续执行它的任务)

Queue.LifoQueue 不适合多处理,只有 multiprocessing.Queue 适合,它是专门为这个用例设计的。这意味着放入 Queue.LifoQueue 的值将只对本地进程可用,因为队列不在子进程之间共享。

一种可能是使用来自 SyncManager (SyncManager.list()) 的共享列表。当仅与 appendpop 一起使用时,列表的行为就像后进先出队列。