我正在尝试让以下全局变量storage_i可供lvl1函数访问,我已经能够将它传递给类birdofprey中的其他函数,但我无法在该框架之外得到它。我已经考虑过在函数等之间使用全局变量,并且我也看到了不鼓励使用全局var的用法。但是,基本上我试图从所有线程中总结出storage_i的值。因此,如果没有全局变量也可以做到这一点。任何帮助将不胜感激。
守则:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py
答案 0 :(得分:1)
替换它:
global storage_i
storage_i = i
有了这个:
birdofprey.storage_i = i
第75行也有拼写错误:
storage_ii = stroage_i + storage_ii
(stroage_i
原定为storage_i
)
这一行实际上应该是:
storage_ii = birdofprey.storage_i + storage_ii
编辑:另外,如果没有密切关注它,你使用类属性(storage_i)看起来很容易受到竞争条件的影响。考虑使用互斥锁来保护对该属性的访问。我认为你还需要等待线程完成执行才能访问这些值。
但我不确定全局(或类属性)是否真的是你想要的。我认为你真正想要的是一个线程局部变量,你可以在线程完成后访问它(参见Thread.join
方法。)如果我正确读取,那么就忘记我上面写的关于互斥锁的内容了。相反,将storage_i属性设置为self.storage_i
(为每个线程创建单独的实例。)然后在for
循环中对值进行求和,将值作为urlv.storage_i
访问。同样,在尝试访问其值之前,在每个线程上执行join
似乎很重要。
这就是我现在可以提供的所有帮助;也许明天早上(我的时间)我可以再次入住。
答案 1 :(得分:0)
如果您想访问storage_i
下的lvl1()
,请使用:
birdofprey.storage_i
好storage_i
不是全局变量,它是一个类属性。