Python全局变量:在函数类和函数之间共享

时间:2010-12-05 06:03:06

标签: python class function global-variables

我正在尝试让以下全局变量storage_i可供lvl1函数访问,我已经能够将它传递给类birdofprey中的其他函数,但我无法在该框架之外得到它。我已经考虑过在函数等之间使用全局变量,并且我也看到了不鼓励使用全局var的用法。但是,基本上我试图从所有线程中总结出storage_i的值。因此,如果没有全局变量也可以做到这一点。任何帮助将不胜感激。

守则:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py

2 个答案:

答案 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不是全局变量,它是一个类属性。