我遇到的情况是,当线程与当前正在运行/正在执行的线程内的条件匹配时,我需要停止执行线程:
这是我的意思的例子:
- 我们有 5 个数字的列表,从 1 到 5。
- 我们将它们排队并与 Run_Calc 函数中的 10 个线程数一起处理它们。
- 在
Run_Calc
中,我希望我的线程在匹配3
条件时停止
import threading,queue
q = queue.Queue()
numbers = [1,2,3,4,5]
for each_num in numbers:
q.put(each_num)
def Run_Calc(no):
print("NO IS : {}".format(no))
if no == 3:
print("YES I WANT TO EXIT HERE and DONT WANT TO EXECUTE 4,5")
def ProcessThreading():
while not q.empty():
get_number = q.get()
Run_Calc(get_number)
th_list = []
for i in range(10):
t = threading.Thread(target=ProcessThreading)
th_list.append(t)
t.start()
for th in th_list:
th.join()
- 输出:
NO IS : 1
NO IS : 2
NO IS : 3
YES I WANT TO EXIT HERE and DONT WANT TO EXECUTE 4,5
NO IS : 4
NO IS : 5
- 如何实现它?
最佳答案
在某些情况下,即使线程是按顺序实例化的,线程也可能会以“谁跑得更快”的方式进行竞争。
对于您的简单情况,请使用 threading.Event
对象在特定事件上同步线程:
import queue
from threading import Thread, Event
q = queue.Queue()
numbers = [1, 2, 3, 4, 5]
for each_num in numbers:
q.put(each_num)
def run_calc(num, e):
print("NO IS : {}".format(num))
if num == 3:
e.set()
print("YES I WANT TO EXIT HERE and DONT WANT TO EXECUTE 4,5")
def process_thread(e):
while not q.empty():
if e.is_set():
break
num = q.get()
run_calc(num, e)
th_list = []
e = Event()
for i in range(10):
t = Thread(target=process_thread, args=(e,))
th_list.append(t)
t.start()
for th in th_list:
th.join()
示例输出:
NO IS : 1
NO IS : 2
NO IS : 3
YES I WANT TO EXIT HERE and DONT WANT TO EXECUTE 4,5
关于python - 如何从线程队列Python内部停止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033038/