程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python在线程之间创建共享变量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python在线程之间创建共享变量?

开发过程中遇到Python在线程之间创建共享变量的问题如何解决?下面主要结合日常开发的经验,给出你关于Python在线程之间创建共享变量的解决方法建议,希望对你解决Python在线程之间创建共享变量有所启发或帮助;

我们可以在线程类外部定义变量,并在类的方法内部全局声明它。

请参见下面的简单示例,它交替打印AB。两个变量flagval在两个线程Thread_A和之间共享Thread_BThread_A打印val=20,然后设置val为30。Thread_B打印val=30,因为val已在中进行了修改Thread_AThread_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中进行项目。

如何创建一个全局变量(在我的情况下,我需要为True或false),以便项目中的所有线程(大约4-6)都可以访问?

大佬总结

以上是大佬教程为你收集整理的Python在线程之间创建共享变量全部内容,希望文章能够帮你解决Python在线程之间创建共享变量所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。