有人可以指出我正确的方向吗?
我试图在python中的多个无限控制循环之间进行交换。我需要杀死一个循环,然后根据外部源(希望是web界面)的请求选择不同的循环,而不是基于内部条件。我理解这是一个模糊的问题,但我需要一个正确方向的一般观点来让我开始,我已经看过异常,信号和线程,但我正在努力寻找什么是“正确”的方法来做到这一点。 / p>
请注意,我在电子工作中没有编程,所以如果这听起来很愚蠢,那就很抱歉。如果这完全是错误的解决问题的方法,有人可以告诉我正确的方法。
如果有人可以帮助我并在必要时发布代码,我可以提供更多信息/说明,但由于问题含糊不清,我认为目前这一点非常无关紧要。
谢谢
答案 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界面等)