Python: MQTT, 2-й процесс не может вмешиваться в 1-й процесс - PullRequest
0 голосов
/ 05 июля 2019

У меня есть файл mqtt (paho), который прослушивает сообщение iot, а затем выполняет какое-то действие. В тестовом проекте у меня есть 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-й процесс (воспроизведение аудио) работал отлично, но 2-й процесс можно вызвать только после завершения 1-го процесса. Следовательно, 2-й процесс не может остановить воспроизведение звука.

Как я могу остановить 1-й процесс "воспроизведения аудио" 2-м процессом? Любое предложение приветствуется.

1 Ответ

0 голосов
/ 05 июля 2019

subprocess.call() синхронно.Из руководства (выделено мое):

Запустите команду, описанную аргументами. Дождитесь завершения команды , затем верните атрибут кода возврата.

Вы хотите асинхронный вызов, поэтому используйте Popen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...