运行一个进程但允许用户采取行动停止它

时间:2018-07-11 15:29:07

标签: python multithreading nested

我正在使用一个允许您选择一个流程的自动化系统,但是我想连续ping该流程以进行状态更新,但允许用户更改流程中的其他活动。如果我同时运行两个py文件,则此方法有效,但对复杂情况而言效果不佳。

简单来说:我希望能够在控制不同事物之间进行切换,但仍然具有实时信息。我似乎无法弄清楚如何在一个简单的python文件中甚至在运行同一应用程序的多个python文件中做到这一点。

示例:

import time

def setHVACTemp():
    '''does stuff'''

def setHVACStatus():
    '''does stuff'''

def fetchTemp():
    print("72")

def fetchHum():
    print("65%")

def fetchFan():
    print("On")

def currentTemp():
    while True:
        time.sleep(1)
        fetchTemp()

def currentHum():
    while True:
        time.sleep(1)
        fetchHum()

def currentFan():
    while True:
        time.sleep(1)
        fetchFan()


def menu():
    print("1. HVAC")
    print("2. TV")
    print("3. Other stuff")
    opt = input("Select your option: ")
    if opt == "1":
        print("a. Set Temp " + currentTemp() + " " + currentHum() + " " + currentFan)
        print("b. Set Home/Away")
        opt2 = input("Select HVAC Option: ")
        if opt2 == "a":
            setHVACTemp()
        if opt2 == "b":
            setHVACStatus()

menu()

如何使此菜单更新温度/湿度/风扇寿命(每隔x秒左右),但仍允许该人为电视或真空度选择2或3?它只是卡在while循环中。

这样做:

1. HVAC
2. TV
3. Other stuff
Select your option 1
72
72
72
72
72
72
Process finished with exit code -1

我想要它做

1. HVAC
2. TV
3. Other stuff
Select your option 1

a. Set Temp (75 65% On)
b. Set Home/Away (Home)
Select HVAC option:

我是Py的初学者(通常是编码人员),因此非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我的例子很差,但是我确实找到了一个可以用的简单得多的例子。

这产生了“做其他事情”,而蜂鸣声不断地响起。

import threading
import winsound


def worker():
    """thread worker function"""
    while True:
        winsound.MessageBeep(1)
        '''Just as a test I put a beeping noise in here'''

threads = []

def test():
    for i in range(1):
        t = threading.Thread(target=worker)
        threads.append(t)
        t.start()
        print("do other stuff")

test()

来源:https://pymotw.com/3/threading/