簡體   English   中英

如何在Pyqt中使用多重處理

[英]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.

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