2013-05-10 3 views
0

Я смотрел, как сделать многопоточное (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? или это просто другая переменная ....

+2

Есть только один поток управления последовательного порта. Он должен зацикливаться между прослушиванием последовательного порта и проверкой очереди для элементов, которые нужно записать. Другой поток может записывать в очередь, когда ему нужно что-то, чтобы перейти в порт. –

+0

Итак, потоки могут изменять переменную и читать результат с помощью другого потока ... Я этого не знал. Я всегда думал, что обмен данными между потоками сложнее. – Biribu

+0

Его легко обмениваться данными между потоками, но это может привести к условиям гонки и другим радостям, поэтому будьте осторожны :) Если это простой логический доступ, то вам не нужно мьютекс или синхронизация. – Brady

ответ

0

Я не уверен, что вы можете обмениваться объектами непосредственно между процессами, но поскольку каждый процесс может обмениваться объектами с основным процессом, вы можете использовать основной процесс для их возврата и вперед:

http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes

Смежные вопросы