簡體   English   中英

Python:使用join和Queue的多線程有時會永遠阻塞

[英]Python: Multithreading using join and Queue sometimes blocks forever

我的代碼如下:

def PreDutyCycleSolve(self, procCount):
    z = self.crystal.z

    #D1 = np.empty(len(z))
    #D2 = np.empty(len(z))

    D1D2q = multiprocessing.Queue()
    procs = []
    for proc in range(procCount):
        p = multiprocessing.Process(target=self.DutyCycleSolve,
                                    args=(proc,
                                          z[proc::procCount],
                                          D1D2q))
        procs.append(p)

    for proc in procs:
        proc.start()

    for proc in procs:
        proc.join()

    while D1D2q.empty() is False:
        x = D1D2q.get()
        print x

我有一個函數DutyCycleSolve ,該函數被分割並從中運行(在我的例子中,是四個進程)。 問題是,取決於數組的長度z,有時,代碼只會被卡住,而不會繼續經過proc.join 我已經驗證了(通過在self.DutyCycleSolve中打印一些文本,使self.DutyCycleSolve始終返回,並且進程始終從該函數退出。

似乎它從函數中退出,然后(有時)卡在join

有什么想法嗎? 我是新來的。

謝謝。

文檔

請記住,將項目放入隊列的進程將在終止之前等待,直到所有緩沖的項目由“ feeder”線程饋送到基礎管道為止。 [...]

這意味着每當您使用隊列時,都需要確保 在加入該進程之前, 將最終刪除所有已放入隊列的項目 否則,您無法確定將項目放入隊列的進程將終止。 還請記住,非守護進程將自動加入。

換句話說,每當您使用隊列時,正確的方法是首先使用get() ,然后再使用join() 有關示例,請參閱文檔。

暫無
暫無

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

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