![](/img/trans.png)
[英]How to implement LIFO for multiprocessing.Queue in 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()
)中的共享列表。 當僅與append
和pop
,列表的行為就像lifo隊列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.