停止另一个函数中的一个线程

时间:2020-09-07 11:04:05

标签: python python-multithreading

您好,我想停止正在运行的线程,但必须从函数中停止它 这是我的代码

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()

我被迫从塞子功能中停止它,即使在这种情况下它也无法执行,我的目标是从tkinter按钮激活塞子功能

time.sleep(4)
stop = True
t1.join()
print("done")

3 个答案:

答案 0 :(得分:1)

你必须放

global stop

也进入您的stopper()函数。否则,该函数将不会设置全局stop,而只会设置具有该名称的局部变量。

答案 1 :(得分:1)

您在global函数中缺少stopper声明。

def stopper():
    global stop
    stop = True
    t1.join()
    print("done")

将解决此问题。

答案 2 :(得分:0)

没有全局声明的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