Derzeit versuche ich einen Pool innerhalb eines Threads zu starten, innerhalb dieses Pools werde ich Instanzen von Qt QWebEnginePage erstellen.PyQt wierd Verhalten mit Multiprocessing.pool
Es passieren zwei Dinge, die nicht passieren sollten.
Erstens:
die Art und Weise es durch die Liste iterieren nicht korrekt ist (entweder es einige Einträge übersprungen oder es ist nicht sortiert (nicht sicher, wie es nicht sein) würde)
Zweitens:
Die Schleife hängt, was bedeutet, dass alles aufhört und ich nichts dagegen tun kann.
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()
Ausgang:
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
Erwartete Ausgabe:
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
Edit: Die for-Schleife funktioniert es ist nur der Pool, der