我正在尝试同时使用线程和多处理模块
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")
上面的代码是我目前正在处理的代码,当我定期运行代码时,会收到“无法启动新线程”错误或只是冻结,但是当我使用调试器https://www.onlinegdb.com/online_python_interpreter时它可以工作,但是速度很慢,所以我对发生的事情感到困惑。
答案 0 :(得分:0)
MultiThreading类中的内部“运行”方法使“ if”块的条件如下所示
if Input > Checked.value:
我在这里假设您要在Checked.value达到Input value时停止创建其他线程。使用下面的现有条件,可能会导致创建无限数量的线程。由于某些线程可能会具有大于100的值,并且该值始终不等于100。因此最终将导致创建无限数量的线程
if not Input == Checked.value: