首页 > 解决方案 > Python:在线程中更改传递的变量并在线程外使用新值?

问题描述

抱歉,如果有人以前问过这个问题,但我目前找不到解决一个奇怪问题的方法。就像我在很多文章中阅读的那样,应该可以将变量传递给 Python 中的线程,在那里更改它,然后在调用线程中使用新值?但这对我不起作用。我在这里有一个示例代码:

from threading import Thread

def change(val):
    val = False

def start():
    val = True
    t = Thread(target=change, args=(val,))
    t.start()
    t.join()

    print(val) #--> stays True but should be False

start()

如果有人知道问题是什么,我很高兴得到答案。

问候白细胞

标签: pythonmultithreading

解决方案


在方法中,内存地址发生了value变化,所以它是一个不同的对象(一个局部变量)。

为了您的目标,使用一个对象并更改一个属性,使对象地址保持不变。

试试这个代码

from threading import Thread

def change(val):
    val[0] = False  # list address stays the same, update attribute

def start():
    val = [True] # list object
    t = Thread(target=change, args=(val,))
    t.start()
    t.join()

    print(val[0])  # False

start()

请注意,这在不使用多线程时也适用。


推荐阅读