2010-12-05 97 views
0

我想要获得以下全局变量storage_i可以访问的lvl1函数,我已经能够将它传递给类鸟类内的其他功能,但我可以除了这个框架之外,我们不会得到它。我环顾了各种函数之间的全局变量,我也看到了全局变量的使用情况。但是,基本上我试图从所有线程中总结出storage_i的价值。所以如果没有一个全球变量也能做到这一点,那也是很棒的。任何帮助,将不胜感激。Python全局变量:功能类之间的共享然后功能

验证码:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py

回答

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看起来很重要。

这就是我现在可以提供的所有帮助;也许明天早上(我的时间)我可以再次入住。

0

如果您要访问storage_ilvl1()下,然后使用:

birdofprey.storage_i

storage_i不是一个全局变量,它的类属性。

+0

好的,谢谢,但是当它被设置为我在def run(self)下时,我该如何访问它:? – eWizardII 2010-12-05 06:23:33

+0

不使用`global storage_i`,你必须使用`self.storage_i`来访问它。 – 2010-12-05 06:27:41