线程中使用进城池,字典self.mp_lst写不进去参数

import multiprocessing as mp
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QMainWindow, QApplication
from main import Ui_MainWindow
class TestThread(QThread):
InformationUpdate = pyqtSignal(list)
def init(self, Main_UI):
super(TestThread, self).init()
self.Main_UI = Main_UI
self.InformationUpdate.connect(self.Main_UI.assignment)
self.manager = mp.Manager
self.mp_lst = self.manager().dict()
self.length = len
def proc_func(self, i):
for n in range(5):
a = (i + n)
self.mp_lst[i] = a
def flow(self):
pool = mp.Pool()
for i in range(7):
pool.apply_async(self.proc_func, args=(i,))
pool.close()
pool.join()
print(self.mp_lst)
def run(self):
# while self.Main_UI.start:
self.flow()
class mainWindow(QMainWindow, Ui_MainWindow):
def init(self):
super().init()
self.setupUi(self)
self.start = False
self.pushButton.clicked.connect(self.kaishi)
def kaishi(self):
print('2')
self.start = True
self.Thread = TestThread(self)
self.Thread.start()
def assignment(self, temp):
self.listWidget.addItem(str(temp[0]))
self.listWidget_2.addItem(str(temp[1]))
self.listWidget_3.addItem(str(temp[2]))
self.listWidget_4.addItem(str(temp[3]))
self.listWidget_5.addItem(str(temp[4]))
self.listWidget_6.addItem(str(temp[5]))
self.listWidget_7.addItem(str(temp[6]))
import sys
if name == 'main':
app = QApplication(sys.argv)
Main = mainWindow()
Main.show()
sys.exit(app.exec_())

  1. 多进程管理器的共享字典有bug,官方有说明过,不知道最新版本有没有修复。
  2. 不建议使用管理器在本地进程间共享数据,管理器是一个单独的进程,涉及到多个锁和多次格式转换,读写性能也不高。管理器更适用于非本地进程间共享数据。
  3. 非要本地进程间共享数据,建议使用共享内存的方式。
import threading

def task(self, call_back):

    self.download()

    if call_back:
        # 回调pbms
        self.call_back()

def main(self, call_back=True):

       # gevent.spawn(self.download, call_back).join()
    threading.Thread(target=self.task, args=(call_back,)).start()
    ## 或者
    threading.Thread(target=self.task, kwargs=({'call_back':call_back})).start()