![](/img/trans.png)
[英]How to use multiprocessing.Queue in Pyqt5 with pyqtgraph?
[英]How to use multiprocessing with Pyqt
我在pyqt中使用多重處理遇到了麻煩,因為它打開了多個窗口,並沒有真正執行目標函數。 我在Qt Designer中創建了我的界面,示例代碼如下:
from multiprocessing import Pool
from PyQt5 import uic, QtWidgets
from PyQt5.QtWidgets import *
import sys
def updater(num):
print(num)
def main_tracker():
p = Pool(processes=4)
data = p.map(updater, range(0, 100))
app=QtWidgets.QApplication(sys.argv)
window = uic.loadUi("tracker.ui")
window.pushButton.clicked.connect(main_tracker)
window.show()
sys.exit(app.exec_())
運行此命令時,界面會正常打開,但是當我單擊GUI上的按鈕時,它只是打開了多個pyqt窗口,並且未按預期運行功能。 我如何才能使該工作正常進行,從而在不打開多個窗口的情況下進行多重處理? 我在這里看到過類似的問題,但是我沒有找到能夠解決我的問題的解決方案。
ui文件的代碼:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>365</width>
<height>134</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>69</x>
<y>19</y>
<width>173</width>
<height>59</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>365</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
我有兩句話。 一律使用
if __name__ == "__main__":
code here
主文件的構造。 在您的情況下,它將是:
from multiprocessing import Pool
from PyQt5 import uic, QtWidgets
from PyQt5.QtWidgets import *
import sys
def updater(num):
print(num)
def main_tracker():
p = Pool(processes=4)
data = p.map(updater, range(0, 100))
if __name__ == "__main__":
app=QtWidgets.QApplication(sys.argv)
window = uic.loadUi("tracker.ui")
window.pushButton.clicked.connect(main_tracker)
window.show()
sys.exit(app.exec_())
並且如果您想在Windows上凍結您的應用程序(創建exec文件),然后將此行添加到您的代碼中(或者它將解決您的錯誤)
import multiprocessing
multiprocessing.freeze_support()
否則,您將再次遇到多個窗口的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.