2010-12-05 18 views
0

次のグローバル変数storage_iをlvl1関数にアクセスできるようにしようとしていますが、これをbirdofpreyクラスの内部の他の関数に渡すことはできましたが、その枠組みの外に出てくることはありません。私は関数などの間でグローバル変数を使用することに注目しました。また、グローバルなvarの使用が推奨されていません。しかし、基本的には、すべてのスレッドからstorage_iの値を集計しようとしています。だから、グローバル変数がなくてもそれが可能ならば、それは素晴らしいでしょう。どんな助けもありがとう。Pythonグローバル変数:関数クラスと関数の間の共有

コード:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py

答えて

1

これを置き換えます。これにより

global storage_i 
storage_i = i 

:あなたは、ライン75でタイプミスを持って

birdofprey.storage_i = i 

storage_ii = stroage_i + storage_ii 

stroage_istorage_iであることを意図していました)

この行は、実際にする必要があります:

storage_ii = birdofprey.storage_i + storage_ii 

EDIT:それは条件をレースに影響を受けやすいですように。また、それをよく見なくても、クラス属性(storage_i)のご使用が見えます。その属性へのアクセスを保護するために、mutexを使用することを検討してください。値にアクセスする前にスレッドの実行が完了するのを待つ必要があると思います。

しかし、グローバル(またはクラス属性)が本当に必要なものかどうかはわかりません。あなたが本当に望んでいるのは、スレッドが終了した後にアクセスできるスレッドローカル変数です(Thread.joinメソッドを参照してください)。私が正しくそれを読んでいれば、上記のmutexについて書いたことを忘れてしまいます。代わりに、storage_i属性をself.storage_i(スレッドごとに個別のインスタンスを作成する)に設定します。値を合計するループのforでは、値にurlv.storage_iという名前でアクセスします。再び、値にアクセスしようとする前に各スレッドでjoinを実行することが重要であるように見えます。

これは私が今提供できるすべての助けです。おそらく明日の朝(私の時間)私は再びチェックインすることができます。

+0

ありがとう、私はそれを設定しましたが、私はurlv.storage_iが動作しないと思います、現在私はurlv.selfなどを試しましたが、AttributeError: 'birdofprey'オブジェクトに属性 'storage_i 'Code:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py(あなたはurlvself atmと言っていることを無視することができます)私はちょうど異なるものをテストしていました – eWizardII

+0

問題は私がアクセスできると思われる関数の実行中の変数ですが、私はクラスbirdofpreyの下にある変数にアクセスできます。 – eWizardII

+0

さて、私はそれが動作するようになったので、私は後でロックせずにそれを試してみるが、それは思われるスレッドでロックを使用する必要があったが、今のところこのように動作します。ありがとう。コード:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py – eWizardII

0

あなたはlvl1()storage_iにアクセスしたい場合は、使用します。

birdofprey.storage_i

まあstorage_iは、グローバル変数、そのクラスの属性ではありません。

+0

ありがとうございます。しかし、def(self)の下で私がiに設定されている場合、どうすればそれにアクセスできますか? – eWizardII

+0

'global storage_i'を使わない場合は、' self.storage_i'を使ってアクセスしなければなりません。 –

+0

さて、関数に@storage_i = i @として保存し、@ lvl1()@ @storage_ii = birdofprey.self.storage_i + storage_ii @それは型オブジェクト 'birdofprey'に属性 'self'がないと主張するコード:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py – eWizardII

関連する問題