Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-update线程变量_Python_Multithreading - Fatal编程技术网

python-update线程变量

python-update线程变量,python,multithreading,Python,Multithreading,如何更新运行线程中的变量,该线程是基于该变量的无限循环? 下面是我尝试的简化版本,当然没有结果,我也找不到任何指针 import some_module as mod import threading class thr (threading.Thread): NUM = 5 # set a default value to start the script def run (self): mod.NUM = NUM mod.main_loop

如何更新运行线程中的变量,该线程是基于该变量的无限循环?
下面是我尝试的简化版本,当然没有结果,我也找不到任何指针

import some_module as mod
import threading

class thr (threading.Thread):
    NUM = 5  # set a default value to start the script
    def run (self):
        mod.NUM = NUM
        mod.main_loop()

try:
    thr().start()
    time.sleep(1)
    thr().NUM = 2
    time.sleep(1)
    thr().NUM = 6
    time.sleep(1)
    thr().NUM = 8

问题在于,每次“调用”(即实例化)
thr
时,您都在创建一个新线程。将代码更改为

t = thr()
t.start()
time.sleep(1)
t.NUM = 2
time.sleep(1)
t.NUM = 6
time.sleep(1)
t.NUM = 8
time.sleep(1)

可能尝试使用队列更改NUM变量

请在此查看示例:


通常说来,队列允许您在线程之间发送数据。使用
get()
从队列获取数据,使用
put()
将数据放入队列。

不幸的是,它仍然没有更新无限循环中的变量它更新线程对象实例中的
NUM
变量。。。要更新
mod.NUM
,只需使用
mod.NUM=2
。。。等等。到目前为止,我已经知道了,我的问题是更新后的变量没有被送入无限循环…@nxet:什么循环?您在问代码中未显示的问题是什么?我的猜测是,某个_module.py中第42行的语句包含错误。。。但这是一个非常疯狂的猜测:-Dman我差一点就打开了某个_module.py,看看有没有错误:/这就是我在这里迷失的方式。基本上,我启动的线程内部有一个无限循环,我要更新的变量是循环解析执行的变量。我认为这与此无关,但在这一点上,可能值得注意的是,某些_module.py实际上是一个多路复用脚本。基本上,我对模块说“57”,它在两个led条之间无限复用所述值(非常粗略地解释)。我需要更新该值,并查看ledsI反映的更改。对于我有限的语言知识来说,这恐怕有点太笼统了,不幸的是,阅读提供的链接没有多大帮助。你能再详细说明一下吗?多谢了,第二个链接更有用。但我是否错误地认为我每次都被迫杀死并繁殖一个新线程?@nxet我不明白:)什么意思——“我每次都被迫杀死并繁殖一个新线程?”