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

如何解决传递给线程类时的变量范围?

开发过程中遇到传递给线程类时的变量范围的问题如何解决?下面主要结合日常开发的经验,给出你关于传递给线程类时的变量范围的解决方法建议,希望对你解决传递给线程类时的变量范围有所启发或帮助;

我正在尝试了解 Python 中的变量作用域,特别是在处理从线程继承的类时。

在我下面的解释中,我将使用按值传递和按引用传递这两个术语,我知道它们都不能很好地描述 Pyhton 中发生的事情,我只是不知道是什么描述了正在发生的事情。

>

在下面的示例中,testObj 类似乎可以在 testThread 和我的主进程中访问,这意味着我通过引用传递 testObj

import threading,time

class testThread(threading.Thread):
    
    def __init__(self,testVal):
        threading.Thread.__init__(self)
        self.stopFlag = false
        self.testVal = testVal
        
    def run(self):
        while not self.stopFlag:
            self.testVal.inc()
            time.sleep(1)
            
    def stop(self):
        self.stopFlag = True
        self.join()

class TESTClass():
    def __init__(self):
        self.val = 1
    def inc(self):
        self.val+=1

testObj = TESTClass()
thread = testThread(testObj)
thread.start()

for n in range(5):
    time.sleep(0.5)
    print(testObj.val)

控制台输出是(或者至少是类似的,取决于线程时间) 2 2 3 3 4

在下面的示例中,testObj 似乎被复制到 testThread 类中,其行为类似于按值传递,这意味着 testObj 和 self.testVal 指向两个不同的内存位置

import threading,testVal):
        threading.Thread.__init__(self)
        self.stopFlag = false
        self.testVal = testVal
        
    def run(self):
        while not self.stopFlag:
            self.testVal += 1
            time.sleep(1)
            
    def stop(self):
        self.stopFlag = True
        self.join()

testObj = 1
thread = testThread(testObj)
thread.start()

for n in range(5):
    time.sleep(0.5)
    print(testObj)

thread.stop()

控制台输出是: 1 1 1 1 1

有人可以解释为什么这些行为不同。我确定这是我的根本误解。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的传递给线程类时的变量范围全部内容,希望文章能够帮你解决传递给线程类时的变量范围所遇到的程序开发问题。

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

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