线程和多处理组合[Python]
我正在尝试同时使用线程和多处理模块线程和多处理组合[Python],python,multithreading,python-multiprocessing,Python,Multithreading,Python Multiprocessing,我正在尝试同时使用线程和多处理模块 import multiprocessing as mp import threading from threading import Thread import time QP = mp.Queue() Lock = mp.Lock() Input = 100 Checked = mp.Value("i",0) class MultiThreading(threading.Thread): def __init__(self,QP,Checked
import multiprocessing as mp
import threading
from threading import Thread
import time
QP = mp.Queue()
Lock = mp.Lock()
Input = 100
Checked = mp.Value("i",0)
class MultiThreading(threading.Thread):
def __init__(self,QP,Checked):
threading.Thread.__init__(self)
self.QP = QP
self.Checked = Checked
def run(self):
global Input
global Lock
QueueMode = self.QP.get()
First,Second = QueueMode
Lock.acquire()
print ("{} {} - Has Successfully Done".format(First,Second))
Checked.value += 1
time.sleep(0.25)
Lock.release()
if not Input == Checked.value:
t = MultiThreading(QP,Checked)
t.setDaemon(False)
t.start()
def MultiCall(QP,Checked):
for i in range(10):
t = MultiThreading(QP,Checked)
t.setDaemon(False)
t.start()
if __name__ == "__main__":
for i in range(100):
QP.put((i,i+i))
Processes = []
for i in range(4):
p = mp.Process(target=MultiCall, args=(QP,Checked))
Processes.append(p)
p.start()
p.join
while not Input == Checked:
continue
print ("Task Done")
上面的代码是我目前正在处理的,当我定期运行代码时,它会出现一个错误“无法启动新线程”或者它只是冻结,但是当我使用调试器时,它会工作,但速度很慢,所以我对正在发生的事情感到困惑。在多线程类中的“run”方法中,将条件设置为“if”块如下所示
if Input > Checked.value:
我在这里假设,一旦选中,您希望停止进一步创建线程。值达到输入值。在如下现有条件下,它可能会导致创建无限多的线程。因为有些线程的值可能大于100,并且始终不等于100。因此,它最终将创建无限多的线程
if not Input == Checked.value:
创建一个NEW线程作为前一个线程的最后一个操作可能不是多线程程序的最佳方法。您应该考虑拥有某种线程池(例如,工作线程),然后反复使用它们。正如下面的答案所指出的,您的问题也源于这个线程创建。您可以轻松地继续超过100个线程。在调试中,您可能不会注意到,因为计时是完全不同的。