2013-01-16 19 views
1

我使用PyQT(Qt版本:4.8.3,PyQt版本4.9.4)創建大量頁面的屏幕截圖。我使用線程策略來提高性能。PyQt垃圾郵件「選擇:無效參數」隨機線程應用程序

它像一個魅力幾秒鐘(約30秒),然後突然該應用程序只是用一個奇怪的「垃圾郵件我的終端」選擇:無效論點「消息。

當然,這不是我的調試信息之一。但是,像這樣真的是隨機的,我無法真正挖掘出發生這種情況的原因。

如果這可以幫助,我生成的線程越多它發生得越快。這可能是一個記憶問題?

我不知道這是否是有用的,但這裏是產卵的方法,我使用的是:

def spawn(self): 
    worker = Worker() # this is a QObject 
    thread = QThread() 
    # When done, respawn a new thread 
    self.connect(worker, SIGNAL("done()"), self.spawn) 
    # And stop the related thread 
    self.connect(worker, SIGNAL("done()"), thread.quit) 
    self.threadsPool.append(thread) # Keep-alive 
    self.workersPool.append(worker) # Keep-alive 
    worker.moveToThread(thread) 
    thread.start() 
    worker.start("myfancydomain.com") 

謝謝您的幫助!

+0

「我生成的線程越多,發生的速度越快」這聽起來像是一種競爭條件,或者線程使用某種共享資源(如非線程安全方式的網絡連接)。我懷疑問題的原因在於您發佈的代碼中,但我真的不知道如何正確診斷此問題。也許試圖通過錯誤消息獲取堆棧跟蹤會有所幫助。 – millimoose

回答

0

它很可能與刪除線程時訪問權限有關。

我認爲你的threadsPool試圖訪問你的線程後,它已經退出或刪除自己。有些地方有threadPool(或某個類似的容器)正在訪問一個壞指針(比如刪除的線程)的槽或函數調用。

要驗證這是問題,請在另一個線程或循環中查詢threadsPool中的線程數以及有關每個線程的一些信息。我在第一個線程退出後打賭,當使用該線程的指針時它會崩潰。