3

有人可以指出我正确的方向吗?

我正在尝试在 python 中的多个无限控制循环之间进行交换。我需要终止一个循环,然后根据来自外部源(希望是 Web 界面)的请求选择一个不同的循环,而不是基于内部条件。我知道这是一个模糊的问题,但我需要一个正确的方向来让我开始,我已经查看了异常、信号和线程,但我正在努力寻找什么是“正确”的方法来做到这一点。

请注意,我在电子行业工作而不是编程,如果这听起来很愚蠢,我很抱歉。此外,如果这完全是解决问题的错误方法,有人可以建议我正确的方法。

如果有人可以帮助我并在需要时发布代码,我可以提供更多信息/解释,但我认为由于问题的模糊性,目前这无关紧要。

谢谢

4

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]()

编辑:正如 Keith 在评论中提到的, 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”中(但是您想要......网络界面等)

于 2012-11-21T22:06:51.713 回答