gpt4 book ai didi

python - 线程和多处理组合 [Python]

转载 作者:太空狗 更新时间:2023-10-30 01:36:16 26 4
gpt4 key购买 nike

我正在尝试同时使用线程和多处理模块

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它有效,但速度很慢,所以我对发生了什么感到困惑。

最佳答案

在 MultiThreading 类的“run”方法中,“if” block 的条件如下

if Input > Checked.value:

我在这里假设您希望在 Checked.value 达到输入值后停止创建更多线程。在下面的现有条件下,它可能会导致创建无限数量的线程。因为有可能某些Threads的值可能大于100,而且它总是不等于100。所以最终会创建无限数量的线程

if not Input == Checked.value:

关于python - 线程和多处理组合 [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52383984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com