从另一个函数停止一个函数中的线程
stop a thread in a function from another function
你好,我想停止一个 运行 的线程,但我必须从一个函数中停止它
这是我的代码
import os
import time
import threading
def run():
while True:
print("ok")
time.sleep(1)
global stop
if stop:
print("stopped")
break
def stopper():
stop = True
t1.join()
print("done")
stop = False
t1 = threading.Thread(target=run)
t1.start()
time.sleep(4)
stopper()
我被迫通过停止功能停止它,即使在这种情况下它可以工作,我也不能那样做,我的objective是从 tkinter 按钮激活停止功能
time.sleep(4)
stop = True
t1.join()
print("done")
你要放
global stop
也进入您的 stopper()
功能。否则该函数将不会设置全局 stop
,而只会设置具有该名称的局部变量。
您在 stopper
函数中缺少 global
声明。
def stopper():
global stop
stop = True
t1.join()
print("done")
将解决问题。
mp.Manager 和 ctypes,没有全局声明
import multiprocessing as mp
import ctypes
import os
import time
import threading
def tunnel_signal():
manager = mp.Manager()
return manager.Value(ctypes.c_char_p, False)
def run(stop_signal):
while True:
print("ok")
if stop_signal.value:
break
def stopper():
stop = True
t1.join()
print("done")
stop_thread = tunnel_signal()
t1 = threading.Thread(target=run, args=(signal,))
t1.start()
time.sleep(4)
stop_thread.value = True
你好,我想停止一个 运行 的线程,但我必须从一个函数中停止它 这是我的代码
import os
import time
import threading
def run():
while True:
print("ok")
time.sleep(1)
global stop
if stop:
print("stopped")
break
def stopper():
stop = True
t1.join()
print("done")
stop = False
t1 = threading.Thread(target=run)
t1.start()
time.sleep(4)
stopper()
我被迫通过停止功能停止它,即使在这种情况下它可以工作,我也不能那样做,我的objective是从 tkinter 按钮激活停止功能
time.sleep(4)
stop = True
t1.join()
print("done")
你要放
global stop
也进入您的 stopper()
功能。否则该函数将不会设置全局 stop
,而只会设置具有该名称的局部变量。
您在 stopper
函数中缺少 global
声明。
def stopper():
global stop
stop = True
t1.join()
print("done")
将解决问题。
mp.Manager 和 ctypes,没有全局声明
import multiprocessing as mp
import ctypes
import os
import time
import threading
def tunnel_signal():
manager = mp.Manager()
return manager.Value(ctypes.c_char_p, False)
def run(stop_signal):
while True:
print("ok")
if stop_signal.value:
break
def stopper():
stop = True
t1.join()
print("done")
stop_thread = tunnel_signal()
t1 = threading.Thread(target=run, args=(signal,))
t1.start()
time.sleep(4)
stop_thread.value = True