gpt4 book ai didi

Python在线程之间创建共享变量

转载 作者:IT老高 更新时间:2023-10-28 20:53:33 32 4
gpt4 key购买 nike

我正在使用“线程”模块在 Python 中开发一个项目。

我怎样才能使我的项目中的所有线程(大约 4-6 个)都可以访问的全局变量(在我的情况下我需要它是 True 或 False)?

最佳答案

我们可以在线程类之外定义变量,在类的方法中声明为全局变量。

请参阅下面的简单示例,该示例交替打印 AB。 flagval 两个变量在两个线程 Thread_AThread_B 之间共享。 Thread_A 打印 val=20 然后将 val 设置为 30。Thread_B 打印 val=30,因为 valThread_A 中被修改。 Thread_B 然后将 val 设置为 20,这又在 Thread_A 中使用。这表明变量 val 在两个线程之间共享。同样的变量flag也在两个线程之间共享。

import threading
import time
c = threading.Condition()
flag = 0 #shared between Thread_A and Thread_B
val = 20

class Thread_A(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name

def run(self):
global flag
global val #made global here
while True:
c.acquire()
if flag == 0:
print "A: val=" + str(val)
time.sleep(0.1)
flag = 1
val = 30
c.notify_all()
else:
c.wait()
c.release()


class Thread_B(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name

def run(self):
global flag
global val #made global here
while True:
c.acquire()
if flag == 1:
print "B: val=" + str(val)
time.sleep(0.5)
flag = 0
val = 20
c.notify_all()
else:
c.wait()
c.release()


a = Thread_A("myThread_name_A")
b = Thread_B("myThread_name_B")

b.start()
a.start()

a.join()
b.join()

输出看起来像

A: val=20
B: val=30
A: val=20
B: val=30
A: val=20
B: val=30
A: val=20
B: val=30

每个线程打印在另一个线程中修改的值。

关于Python在线程之间创建共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17774768/

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