簡體   English   中英

帶(LIFO)隊列的Python多處理

[英]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.empty()檢查放在q.put(x)之后),並且隊列不應為空。

我應該怎么做才能使主循環看到隊列中的值? 還是我以一種低效的方式來解決這個問題? (我確實需要myFunc和主循環分別運行,因為myFunc有點慢,並且主循環需要繼續執行其任務)

Queue.LifoQueue不適合多處理,僅multiprocessing.Queue是為此用例專門設計的。 這意味着放入Queue.LifoQueue值僅對本地進程可用,因為該隊列不在子進程之間共享。

一種可能是使用SyncManager( SyncManager.list() )中的共享列表。 當僅與appendpop ,列表的行為就像lifo隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM