Я смотрел, как сделать многопоточное (2 потока) в python.Приостановить один поток от другого в python
Я хочу, чтобы один из них постоянно читал последовательный порт. чтение каждого кадра и сохранение их в базе данных. Я уже сделал сценарий для этого.
Для второго, я хочу, чтобы он прослушивал порт сокета. Когда он получает что-то из этого порта, я хочу, чтобы он приостанавливал первый поток, записывал что-то в последовательный порт и записывал в сокет. После этого отключите первый поток и вернитесь к порту сокета.
Я думаю, что лучшая идея - приостановить один поток от другого, чтобы прочитать последовательный порт в тот момент, потому что если я прочитаю ответ последовательным портом в 1-м потоке, я должен передать значение, прочитанное во второе, и это сложнее, не так ли?
У меня уже есть часть записи на последовательном порту и проверьте некоторые уроки для сокетной части, поэтому у меня нет проблем с этим. Но я не нашел ничего о том, чтобы приостановить один поток от другого, и я думаю, что это невозможно.
Что делать в этом случае?
EDIT: Задать вопрос об общих переменных: SO я могу объявить глобальную переменную и сделать что-то вроде:
global1
global2
Thread 1:
while(global1 == 0)
do whatever
global2 = 1
thread 2:
wait socket
if dataReceived: global1 = 1
if global2 = 1 do whatever on serial port
global2 = 0
when finish global1 = 0
2 глобалов я могу уведомить thread1 прекратить идти вперед следующей итерации и с global2, то второй поток знает, когда последовательный порт не используется ...
Как объявить общую переменную в python? или это просто другая переменная ....
Есть только один поток управления последовательного порта. Он должен зацикливаться между прослушиванием последовательного порта и проверкой очереди для элементов, которые нужно записать. Другой поток может записывать в очередь, когда ему нужно что-то, чтобы перейти в порт. –
Итак, потоки могут изменять переменную и читать результат с помощью другого потока ... Я этого не знал. Я всегда думал, что обмен данными между потоками сложнее. – Biribu
Его легко обмениваться данными между потоками, но это может привести к условиям гонки и другим радостям, поэтому будьте осторожны :) Если это простой логический доступ, то вам не нужно мьютекс или синхронизация. – Brady