Python,如何在多个无限循环之间交换?

时间:2012-11-21 22:03:02

标签: python loops break

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

我试图在python中的多个无限控制循环之间进行交换。我需要杀死一个循环,然后根据外部源(希望是web界面)的请求选择不同的循环,而不是基于内部条件。我理解这是一个模糊的问题,但我需要一个正确方向的一般观点来让我开始,我已经看过异常,信号和线程,但我正在努力寻找什么是“正确”的方法来做到这一点。 / p>

请注意,我在电子工作中没有编程,所以如果这听起来很愚蠢,那就很抱歉。如果这完全是错误的解决问题的方法,有人可以告诉我正确的方法。

如果有人可以帮助我并在必要时发布代码,我可以提供更多信息/说明,但由于问题含糊不清,我认为目前这一点非常无关紧要。

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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界面等)