2016-10-13 114 views
0

複数のモジュール間で変数を共有する必要があります。これらの変数は、プログラムの実行中にスレッドによって非同期に変更されます。Pythonモジュール間で変数を共有するには?

変数の最も再送された状態に複数のモジュールで同時にアクセスできる必要があります。

複数のモジュールも同じ変数に書き込みます。

基本的には、モジュール内のグローバル変数のような共有メモリ空間ですが、他のすべてのモジュールで非同期に変更可能な&にアクセス可能です。

私はモジュール内のグローバル変数をロックすることに慣れています。私はこれを複数のモジュールにわたってどこから始めるべきか分かりません。

どうやってですか?たとえば、config.pyためのモジュールで

+0

これは役に立ちます。 http://stackoverflow.com/questions/142545/python-how-to-make-a-cross-module-variable – dunder

+0

意図しない結果がありますか?そして/または、__builtin__ varを変更している間にvarをロックすることができると想定していますか?これは一般的に行われている方法ですか? – Emily

+0

あなたは 'django.settings'varsに対してどのように行われたかを見ることができます。私はそれがどのように行われるべきだと思います。そのような変数の親モジュールを維持する。 – dunder

答えて

1

置き、すべてのグローバル変数、およびそれをあなたのモジュール全体をインポート:

config.py:

a=None 
varlock=None 

main.py:

import config 
import threading 

config.a = 42 
config.varlock = threading.RLock() 
... 

次に、変数を保護するために、メインで一度インスタンス化されたグローバルロックインスタンスを使用できます。いずれかのスレッドでこれらのいずれかを変更するたびに、

としてください。

ハヌー

+0

なぜメインでインスタンス化するのですか?何らかの理由でconfig.pyにすべての情報を残しておかないと、すべてのモジュールにconfigがインポートされますか? – Emily

+0

RLockインスタンスを1回だけ作成する限り、実際には関係ありません。間違っていると、いくつかのロックインスタンスが作成されてしまうことがあります。その場合、ロックインスタンスは機能しません。私はグローバル変数とスレッドをかなりたくさん使用しています。私のmodusオペランドはconfig.pyをどこにでも含めることです。main.pyにすべてのロックをインスタンス化してからスレッドを起動してください。これにより、グローバルであると想定されるものを設定したり、ロックなどの「静的」なものを設定するときには、並列性が保証されません。 – Hannu

関連する問題