Python Multiprocessing With (LIFO) Queues



我试图在Python中使用多处理,使函数在循环中不断被调用,然后访问函数的最新返回值(通过将值存储在LIFO队列中)。

下面是主程序

的代码片段
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一起使用时,列表的行为就像lifo队列。

相关内容

  • 没有找到相关文章