我用 PyQt 做了一個代碼(附加在下面),它應該創建執行緒并計算當你點擊一個按鈕時它們中有多少是活動的。由于每個執行緒內都有一個 time.sleep(1),我應該能夠足夠快地單擊按鈕,以便在每個執行緒完成時 active_threads 計數在減少之前增加。
但是,無論我多快單擊按鈕,我都只能看到終端上列印的數字 1。我查看了執行緒檔案和關于 active_count() 它說:
回傳當前活動的 Thread 物件的數量。
所以我想 QThreads 不使用執行緒物件,而是使用其他一些實作。我在 QThread 類檔案中沒有發現任何關于計算 QThreads 的資訊。什么是最好的策略?有什么比將執行緒存盤在串列中并在最后將它們從串列中洗掉更好的方法?
代碼:
#!/usr/bin/python3
import sys, threading, time
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QWidget
from PyQt5.QtCore import QThread
threads=[]
class Example(QThread):
def run(self):
print(threading.active_count())
time.sleep(1)
def thread_creator():
new_thread=Example()
threads.append(new_thread)
new_thread.start()
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('QHBoxLayout')
layout = QHBoxLayout()
my_widget=QPushButton('Eat healthy!')
my_widget.clicked.connect(thread_creator)
layout.addWidget(my_widget)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())
uj5u.com熱心網友回復:
兩者Thread和QThread都只是用于管理系統執行緒的包裝物件。正如您參考的 Python 檔案所述,active_count是 PythonThread物件的計數,而不是系統執行緒。顯然,您的系統上可能還有許多其他活動的執行緒,這些執行緒是由其他行程或您的程式使用的其他庫(例如 Qt)創建的。因此,您需要決定要計算哪個特定的執行緒子集。除了您自己創建的執行緒之外,Qt 可能會在內部創建執行緒,因此您可能不想同時計算這些執行緒......
如果您只想計算您自己啟動的那些執行緒,那么您已經擁有active_countPython 執行緒。對于 Qt,您可以使用QThreadPool。另一種可能性可能是使用所有執行緒都可以訪問的中央佇列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/487254.html
上一篇:Rust2021與2018:特征`std::marker::Send`未實作-在2021版中執行此操作的正確方法是什么?
下一篇:如何繪制隨時間變化的比較直方圖?
