これを置き換えます。これにより
global storage_i
storage_i = i
:あなたは、ライン75でタイプミスを持って
birdofprey.storage_i = i
:
storage_ii = stroage_i + storage_ii
(
stroage_i
は
storage_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
を実行することが重要であるように見えます。
これは私が今提供できるすべての助けです。おそらく明日の朝(私の時間)私は再びチェックインすることができます。
ありがとう、私はそれを設定しましたが、私は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
問題は私がアクセスできると思われる関数の実行中の変数ですが、私はクラスbirdofpreyの下にある変数にアクセスできます。 – eWizardII
さて、私はそれが動作するようになったので、私は後でロックせずにそれを試してみるが、それは思われるスレッドでロックを使用する必要があったが、今のところこのように動作します。ありがとう。コード:https://github.com/eWizardII/homobabel/blob/master/Experimental/demo_async_falcon.py – eWizardII