首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从另一个函数停止另一个函数中的线程

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

Stack Overflow用户
提问于 2020-09-07 19:04:06
回答 3查看 95关注 0票数 0

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

代码语言:javascript
复制
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按钮激活停止功能

代码语言:javascript
复制
time.sleep(4)
stop = True
t1.join()
print("done")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-07 19:20:42

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

代码语言:javascript
复制
def stopper():
    global stop
    stop = True
    t1.join()
    print("done")

将会解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2020-09-07 19:20:06

你必须把你的

代码语言:javascript
复制
global stop

添加到stopper()函数中。否则,该函数将不会设置全局stop,而只是设置一个具有该名称的局部变量。

票数 1
EN

Stack Overflow用户

发布于 2020-09-07 19:27:13

在没有全局声明的情况下,如何处理mp.Manager和ctype

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63776349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档