python | 多线程下局部变量会改变吗 发表于 2023-11-30 分类于 python , 进阶 , 多进程 & 多线程 , 多线程 , 基础 阅读次数: Valine: 记得这样一句话。 在 Python 中,线程在执行过程中的状态信息(包括局部变量和参数)会被存储在线程的调用栈中。当操作系统进行 CPU 切换,从一个线程切换到另一个线程时,当前线程的状态信息会被保存,包括栈帧(保存了方法调用的参数、局部变量等信息),然后切换到另一个线程。对于正在执行的线程,其局部变量和参数会被保存在线程的栈帧中。当线程切换时,这些信息会暂时被保存下来,并在线程重新获得 CPU 时间时,继续执行。这种方式确保了线程在切换后可以恢复到之前执行的状态,包括方法的参数。 所以,这里要验证的是,不同多线程进行 cpu 调度后,是否会改变局部变量。 123456789101112131415161718192021222324252627282930313233343536import timefrom concurrent.futures import ThreadPoolExecutorclass Deal: def __init__(self): self.g = {"b": 1} def deal(self, data, thread_type): print(f"{thread_type} {data} {self.g}") if thread_type == 2: print(f"{thread_type} {data} {self.g}") time.sleep(2) print(f"{thread_type} {data} {self.g}")d = Deal()b = {"a": 1}def d1(): d.deal(b, 2)def d2(): d.g["b"] = 2 d.deal({"a": 2}, 1)if __name__ == '__main__': pool = ThreadPoolExecutor(max_workers=2) pool.submit(d1) time.sleep(1) pool.submit(d2) time.sleep(10) 输出 123452 {'a': 1} {'b': 1}2 {'a': 1} {'b': 1}1 {'a': 2} {'b': 2}1 {'a': 2} {'b': 2}2 {'a': 1} {'b': 2} 上述输出说明两个问题 多线程修改共有变量的时候,会共享变量 多线程的局部变量是独立的 请我喝杯咖啡吧~ 打赏 微信支付 支付宝