大佬教程收集整理的这篇文章主要介绍了传递给线程类时的变量范围,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试了解 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,请注明来意。