Python:多线程还是循环?

时间:2018-02-27 22:51:02

标签: python multithreading loops if-statement conditional

我想知道使用多线程的概念在光强度传感器和运动传感器之间进行信息共享是否可行。我正在开展一个项目,以在房间环境中自动化照明质量。 (我是编程初学者,非常感谢任何反馈!)

我开始的方式就是现在用简单的数值条件和打印语句来测试代码。下面是项目的模拟代码。

x=1 #set simply to say some is enters room

def MotionSenseLeave(x):

    x=0
    if x==0:
        print("3. Someone left")           #Wait for someone to leave by checking condition
        LightSense()
    else:
        x==0
    return x 

def LightSense():

    #Turn on lights
    if x==1:               #and light quality is above/below a value#
        print("2. Adjust Light")    #Measure Light Quality
        MotionSenseLeave(x)
    elif x==0: 
        print("Stop operation, the person left")
        MotionSenseEnter(x)
    elif x==1:          #and light is close to value
        print("Light quality sufficent, no changes needed")
        MotionSenseLeave(x)

def MotionSenseEnter(x):

    while x!=1:
        if x==1:
            print("1. Someone here")           #Wait for someone to come in
            LightSense()
        else:
            x==0
    return x   

MotionSenseEnter(x)                           #begin operation

基本上,操作从MotionSenseEnter()开始,等待输入条件或x = 1(在这种情况下,我只是在开始时将其设置为1)。如果有人进入,则转到LightSense(),打开灯,然后案例开始,每次案例后我运行MotionSenseEnter()或MotionSenseLeave()函数,看看是否有人进入/离开系统关闭/关闭从头开始重新启动,直到检测到输入。

我想知道多线程这些进程是否更有效。如果是,我想我必须首先检查是否有人进入房间,然后多线程离开条件和灯光监控条件继续操作或关闭它并等待再次进入。如果有人对此有任何意见,所有反馈都会受到欢迎。再一次,我是编程的初学者,我很欣赏所有的想法,但简单的想法对我来说最好!

1 个答案:

答案 0 :(得分:2)

这取决于您从传感器获取信息的方式以及调整光线的意义。

您正在执行control system,这通常意味着您要为您的操作绘制并实施state machine。 你想要“灯灭”,“灯亮”等状态,你的事件是“运动检测”,“运动停止” - 可能还有一些额外的状态,如果有人站着不动,你就不会闪烁灯光。 / p>

根据您的输入,您必须:

  • 从您收到的推送活动开车
  • 循环,从传感器轮询信息

其中任何一个都不需要多线程。驱动灯光可能有用:如果你想让它们上升而不是立即开启,你可能需要一个单独的线程,随着时间的推移调整光线以达到状态机预期的水平。

基本系统应该可以在没有任何多线程的情况下实现。你需要一些事件处理才能有一个定时事件。 (在X秒不活动后关灯)

在你的伪代码中,你目前有一个无限的递归,你绝对不需要。