I have python
gui app using Qt
I'm using pyqt5
the app should creating 1000 or more Qthreads
, each thread will use pycurl
to open external URL
I'm using this code to open the threads:
self.__threads = []
# workerClass thread
for i in range(1000):
workerInstance = workerClass()
workerInstance.sig.connect(self.ui.log.append)
thread = QThread()
self.__threads.append((thread, workerInstance))
workerInstance.moveToThread(thread)
thread.started.connect(workerInstance.worker_func)
thread.start()
WorkerClass will use a simple pycurl
to visit an external URL and emit signal to add some info on the log, here is the code:
class workerClass(QObject):
x = 1
sig = pyqtSignal(str)
def __init__(self, linksInstance, timeOut):
super().__init__()
self.linksInstance = linksInstance
self.timeOut = timeOut
@pyqtSlot()
def worker_func(self):
while self.x:
# run the pycurl code
self.sig.emit('success!') ## emit success message
Now the problem is with stopping all this, I used the below code for stop button:
def stop_func(self):
workerClass.x = 0
if self.__threads:
for thread, worker in self.__threads:
thread.quit()
thread.wait()
changing the workerClass.x
to 0 will stop the while self.x
in the class workerClass
and quit and wait should close all threads
all this is working properly, BUT only in the low amount of threads, 10 or may be 100
but if I rung 1000 threads, it takes much time, I wait for 10 minutes but it didn't stopped (mean threads not terminated), however the pycurl
time out is only 15 seconds
I also used: self.thread.exit()
self.thread.quit()
self.thread.terminate()
but it gives no difference
if any one have any idea about this, this will be really great :)