gpt4 book ai didi

python - 如何使用全局变量的值来确定在单独线程中运行的函数的控制流?

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:31 25 4
gpt4 key购买 nike

在我的第一个串行通信项目中,我试图实现一个过程,其中后台线程中的函数监听串行端口以获取就绪信号。当收到就绪信号时,它将全局变量更新为 True 值,以便另一个函数将启动。

下面是逻辑的简化版本,但我无法让它工作。这两个线程似乎仍在连续运行,而不是同时运行

import threading
import time


global CONS
CONS = False
print(CONS)

def timeout(state,my_timeout):
_time = 0
while _time < my_timeout:
if state:
print(state)
print('Signal received, returning True to start another function')
return bool(state)
_time += 1
time.sleep(1)
print(_time)
else:
print('Timeout occured: Ready signal not received within %s seconds', _time)
return False

def smallmeth():
time.sleep(2)
global CONS
CONS = True
print(CONS)
return CONS


t1 = threading.Thread(target=timeout(CONS,5))
t2 = threading.Thread(target=smallmeth)
threading.enumerate()
# t1.setDaemon()
t1.start()
t2.start()

运行时得到的输出是这样的:

False
1
2
3
4
5
Timeout occured: Ready signal not received within 5 seconds
True

最佳答案

t1 = threading.Thread(target=timeout(CONS,5))

在这里,您调用函数timeout,然后将结果作为新线程的目标传递。所以timeout是在t1创建之前执行的。如果要将参数传递给线程目标,请按如下操作:

t1 = threading.Thread(target=timeout, args=(CONS,5))

此外,您永远不会在超时中使用全局变量。所以即使你进行了上述修正,结果仍然是一样的。

关于python - 如何使用全局变量的值来确定在单独线程中运行的函数的控制流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082932/

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