У меня есть следующий код:
from PyQt5 import uic, QtWidgets
import os
import sys
import threading
from multiprocessing import Pool
def fetchdata(num):
message = window.lineEdit()
print(message)
def processchain():
p=Pool(processes=15)
data=p.map(fetchdata,range(1,1000))
def alltask():
x = threading.Thread(target=processchain)
x.start()
if __name__ == '__main__':
y = os.getcwd()
app=QtWidgets.QApplication(sys.argv)
window = uic.loadUi(os.path.normpath(y)+ "\\" + "estate.ui")
window.pushButton.clicked.connect(alltask)
window.show()
sys.exit(app.exec_())
Функция многопроцессорной обработки fetchdata
имеет строку input = window.lineEdit.text()
, которая выдает ошибку о том, что переменная окна не определена. Означает ли это, что я должен передать переменную окна потоку в функции alltask
, а затем передать ее из потока в функцию processchain
, которая затем передаст ее всем многопроцессорным процессам? Это похоже на боль, и я надеюсь, что есть более простой способ
Как я могу сделать объекты GUI доступными для каждого потока и процесса? Ниже приведен код для воспроизведения файла estate.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>640</width>
<height>186</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>370</x>
<y>30</y>
<width>151</width>
<height>71</height>
</rect>
</property>
<property name="text">
<string>ENTER</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit">
<property name="geometry">
<rect>
<x>120</x>
<y>49</y>
<width>191</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>40</x>
<y>60</y>
<width>47</width>
<height>13</height>
</rect>
</property>
<property name="text">
<string>INPUT</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>