【发布时间】:2017-07-23 01:40:05
【问题描述】:
目前我正在尝试在线程中启动一个池,在这个池中我将创建 Qt 的 QWebEnginePage 的实例。
有两件本不应该发生的事情正在发生。
第一:
它遍历列表的方式不准确(它跳过了一些条目或者它没有排序(不确定它会不会是这样))
第二:
循环挂起,这意味着一切都停止了,我似乎无能为力。
from multiprocessing.pool import Pool
from multiprocessing import Process
from threading import Thread
from PyQt5.Qt import *
class Webkit(QWebEnginePage):
def __init__(self):
self.app = QApplication([])
super(Webkit, self).__init__()
self.loadFinished.connect(self.pageFinishedLoading)
def loadUrl(self, url):
self.load(QUrl(url))
self.app.exec()
def pageFinishedLoading(self):
self.app.quit()
def first():
"""Thread + Process"""
#Thread(target=lambda: Process(target=second().foo()).start(), daemon=False).start()
"""Thread"""
Thread(target=second().foo()).start()
"""Process"""
#Process(target=second().foo()).start()
class second:
def foo(self):
count = 10
print("Starting pool")
with Pool(1) as pool:
pool.map(final, range(count))
print("Starting process")
for x in range(count):
p = Process(target=final, args=(x, ))
p.start()
p.join()
print("Finished")
def final(a):
print("Now creating webkit", a)
wk = Webkit()
wk.loadUrl("https://google.com")
if __name__ == '__main__':
app = QApplication([])
first()
app.exec()
输出:
Starting pool
Now creating webkit 0
Now creating webkit 1
Now creating webkit 3
Now creating webkit 4
Now creating webkit 6
Now creating webkit 7
Now creating webkit 9
预期输出:
Starting pool
Now creating webkit 0
Now creating webkit 1
Now creating webkit 2
Now creating webkit 3
Now creating webkit 4
Now creating webkit 5
Now creating webkit 6
Now creating webkit 7
Now creating webkit 8
Now creating webkit 9
Starting process
Now creating webkit 0
Now creating webkit 1
Now creating webkit 2
Now creating webkit 3
Now creating webkit 4
Now creating webkit 5
Now creating webkit 6
Now creating webkit 7
Now creating webkit 8
Now creating webkit 9
Finished
编辑:for 循环有效,只是池损坏了
【问题讨论】:
标签: python qt pyqt python-multiprocessing