Python:MQTT,第二个进程不能干扰第一个进程

时间:2019-07-05 17:54:25

标签: python subprocess mqtt

我有一个mqtt(paho)文件,它可以监听物联网消息,然后执行一些操作。在一个测试项目中,我有2个过程,一个是“播放音频”,另一个是“停止”该过程

def on_connect(self, mosq, obj, rc):
    mqttc.subscribe(MQTT_TOPIC_START, 0)
    mqttc.subscribe(MQTT_TOPIC_STOP, 0)

def on_message(mosq, obj, msg):
    print "Topic: " + str(msg.topic)
    print "QoS: " + str(msg.qos)
    print "Payload: " + str(msg.payload)
    iot_data = json.loads(str(msg.payload))

    if (iot_data["action"]== 'capture'):
        subprocess.call('python play_audio.py', shell=True)
    elif (iot_data["action"]== 'stop'):
        subprocess.call('pkill -f play_audio.py', shell=True) 

第一个进程(播放音频)运行良好,但是只有在第一个进程完成后才能调用第二个进程。因此,第二进程无法停止“播放音频”。

如何停止第二过程的“播放音频”第一过程? 任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

subprocess.call()是同步的。从手册(重点是我的):

  

运行args描述的命令。 等待命令完成,然后返回returncode属性。

您要进行异步调用,因此请使用Popen