3

私は問題に対処する他のいくつかのスレッドを見ましたが、それを完全には理解していません。

共有変数を含む構成ファイルがあるとします。

Config.py

flag = False

Test1.py

import config
while(1):
    config.flag = True
    print config.flag

Test2.py

import config
while(1):
    config.flag = False
    print config.flag

今実行Test1.pyして、出力でTest2.py切り替えを確認でき'True' 'False'ますか?共有変数にアクセスできる限り、この時点では同期は気になりません。

ありがとう。

4

2 に答える 2

4

いいえ。両方のインスタンスを別々のプロセスで実行している限り、メモリが魔法のように共有されることはありません。

2つの異なる(Python)プロセスを開始しています。これらのプロセスは、構成モジュールをインポートします。簡略化すると、これはconfig.pyにコードをロードする形式にすぎません。プロセス間でこれ以上の通信は行われません。

(補足として、config.pyのコードは最初にのみ解釈され、コンパイルされて別のconfig.pycに保存され、ロードがはるかに高速になります。次にconfig.pyを編集すると、config.pycが再作成されます) 。

他のオプションがあります:

  • スレッドを使用する
  • パイプなど、他の形式のメモリ共有を使用します。

スレッドの例:

config.py

flag = False

test.py

import thread
import time

import config


def test1():
    while 1:
        config.flag = True
        time.sleep(0.7)
        print 'test1:', config.flag
        time.sleep(1)

def test2():
    while 1:
        config.flag = False
        time.sleep(1.1)
        print 'test2:', config.flag
        time.sleep(1)

thread.start_new(test1, ())
test2()

これを行おうとしている理由を投稿すると役立つ場合があります。マルチスレッドは難しいトピックです。この質問は役に立つかもしれません:https ://stackoverflow.com/questions/4690518/multithreading-in-python

于 2013-01-09T22:59:58.240 に答える
1

いいえ、config.flagはTest1.pyとTest2.pyの間で共有されません。Test1.pyとTest2.pyは、Pythonインタープリターの別々のインスタンスで実行されます。各インタープリターは、config.pyを独自のメモリ区画にロードします。

1つのオプションは、スレッドを使用して同じPythonインスタンスでTest1.pyとTest2.pyを実行することです。

もう1つのオプションは、値を保存してディスクから継続的にロードすることです。おそらく、テキストファイルに保存するか、SQLiteを使用します。

于 2013-01-09T23:05:00.613 に答える