簡體   English   中英

Python多處理隊列未返回

[英]Python multiprocessing queue not returning

我正在嘗試使用多處理模塊來加載一堆作業(不返回任何內容-它們只是保存到磁盤上),而且我似乎無法退出多處理隊列。 我已經查看了stackoverflow上的所有鏈接,而Google仍然不明白為什么作業未正確完成。

該代碼似乎運行良好(即,它以適當的順序對任務進行排隊和處理-而不是為每個內核分配任務列表)。 但我似乎無法弄清楚如何退出隊列:(

任何建議都非常感激,我已經花了很多時間在此上。

這是我的代碼:

        import multiprocessing as mp

        # make arg list first
        args_in = []
        for channel in channels:
            args_in.append(...)  # append some stuff

        # make a queue and add list to queue:
        #q = mp.Queue()
        q = mp.JoinableQueue()
        for arg in args_in: 
            q.put(arg)        # add list of args

        # worker function
        def worker(q):
          for item in iter(q.get, None):
            res = cluster_channels_chunks_args(item)
            q.task_done()


        # make a list of processes and add worker function
        procs = []
        for i in range(CONFIG.resources.n_processors):
            procs.append(mp.Process(target=worker, args=(q,)))
            procs[-1].daemon = True
            procs[-1].start()

        for p in procs:
            p.join()

[編輯]如果我注釋掉procs [-1] .daemon = True,我將不再獲得正確的行為,並且似乎為內核分配了必須分別完成的作業列表。 我需要內核在完成任務后立即將其動態地從池中奪取(否則,某些內核會先完成任務,而其他系統又會掛起系統掛起時間,以至於一個內核無法完成許多任務)。

在最后一行中,您正在join守護進程。 根據Python 文檔

請注意,不允許守護進程創建子進程。 否則,如果守護進程在其父進程退出時被終止,它將使其子進程變成孤兒。 另外,這些不是Unix守護程序或服務,它們是正常的進程,如果非守護進程退出,它們將終止(而不加入)。

暫無
暫無

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

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