別のモジュール(別のPythonファイルのSqRt、dumb_waiter.py)をスレッドとして実行するPythonプログラムが1つあります。スレッド/モジュールが実行され、私に知らせるためにいくつかのコメントが表示されます。しかし、それを呼び出すトップレベルのプログラムは、それが作成したグローバル変数(Result)を見ていません。私が同じPythonファイルに両方のビットのコードを持っていれば、すべてOKです。Pythonプログラムは別のPythonプログラムでスレッドを実行し、グローバル変数を見ることができません
私は実際にボタンを押すと、RPiで画像をキャプチャしようとしていますが、すべてがポーリングで動作しますが、スレッドとして動作させることはできません(ポーリングはすべてのフレームです。非常に低い、それはボタンを押すことができない)。
以下のコードは、非常に簡単なテストコードです。これはdumb_waiter.pyのSqRtを呼び出します(名前がうんざりです)。私は変数の可視性の問題に焦点を当てる以外に、目的を果たさない。
import time
from threading import Thread
from dumb_waiter import SqRt
Result = False
Result1 = Thread(target = SqRt, args = ("sqrt 2", 2))
Result1.start()
while not Result:
pass
print("test dumb_waiter, output is", Result)
次はプログラムdumb_waiter.pyです。 .....私はランダム遅延は1〜10秒を追加するので、私は簡単に複数のスレッドが動作して可視化することができます: -
import time
from threading import Thread
from random import randint # this should be in the module below, but it works
def SqRt(VarName, MyNo):
global Result
Result = False
Wait = randint(1,10)
print("wait", Wait, "seconds")
time.sleep(Wait)
Result = [VarName, MyNo ** 0.5]
print("dumb_waiter result is", Result)
return
上記の次の出力が生成されます -
待ち時間2秒
をdumb_waiter結果が[「sqrtの2」、1.4142135623730951]
明らかにスレッドが働いているが、私はdumb_waiter.pyを呼び出して、以前のコードからグローバル変数の検索結果を見ることができないので、印刷を実行していないのです( "test dumb_waiter、output is"、Result)instru最上位レベルのコードに含まれています。私が言うように、すべてを1つのPythonファイルに入れれば、それはすべて正常に動作します.....
スレッドコードが変更された変数2つのプログラムが異なるPythonファイルにありますか?
スレッドに参加することについての良い点。実際のプログラムでは、ボタンが押されたかどうかを確認するために、結果をポーリングします(フレーム間)。私は、(私の意見では)非常に控えめな解決策で、問題を解決しました。私は後で入力を最小限に抑えるためにd#としてimport dumb_waiterを追加しました。 dumb_waiter import *からd.ResultとしてResultを参照しました。申し訳ありませんが、crを取得するように見えることはできませんので、レイアウトは貧弱です。 – PeterPiper