3

誰かが私を正しい方向に向けてくれませんか?

Python内の複数の無限の制御ループを交換しようとしています。内部条件に基づいてではなく、ループを強制終了してから、外部ソース(できればWebインターフェイス)からの要求に応じて別のループを選択する必要があります。これは漠然とした質問だと理解していますが、始めるには正しい方向への一般的なポイントが必要です。例外、シグナル、スレッドを調べましたが、これを行うための「正しい」方法を見つけるのに苦労しています。

注意してください、私はプログラミングではなく電子機器で働いているので、これがばかげているように聞こえたら申し訳ありません。また、これが問題を解決するための完全に間違った方法である場合、誰かが正しい方法について私にアドバイスすることができます。

誰かが私を助けてくれて、必要に応じてコードを投稿できるなら、私はより多くの情報/説明を提供することができますが、質問が曖昧であるため、現時点ではかなり無関係だと思います。

ありがとう

4

2 に答える 2

2

繰り返し実行したい 2 つ (またはそれ以上) のプロシージャがあり、ユーザーが新しい条件を選択したときにそれらを変更できるようにしていると思います。オブジェクトとして関数を持つ Python を利用するので、次のようになります。

def f1():
    # do something
def f2():
    # do something else

func_to_run = {"user_input1": f1, "user_input2": f2}

while True:
    user_input = get_any_new_input()  # however you want to get your user input
    func_to_run[user_input]()

編集:キースがコメントで述べたように、get_any_new_input はノンブロッキングである必要があります。私はスレッドを介してこれを行います。Web インターフェースはループとは別のスレッドにある必要がありますが、Web インターフェースが設定する制御オブジェクトを共有します。利用可能な場合、これはデータベース内のテーブルである可能性があります。独自のロックを使用すると、次のようになります。

L = threading.Lock()  # Shared by web ui
user_response = 'data set by web ui'
last_input = 'user_input1'

def get_any_new_input(L, last_input, user_response):
    if L.acquire([False]):
        last_input = user_response
    return last_input
于 2012-11-21T22:17:43.833 に答える
1

最も簡単な方法は、おそらくループを制御するファイルを読み取ることです...

while True:
    #loop1
    while True:
       #do something
       with open("some.file") as f:
            if f.read() == "loop2":
                break
     #loop2
     while True:
        #do something
        with open("some.file") as f:
            if f.read() == "loop1":
                break

次に、必要なループを「some.file」に入れます(ただし、必要に応じて... Webインターフェイスなど)

于 2012-11-21T22:06:51.713 に答える