2016-07-27 3 views
0

Я получаю данные с сервера каждые 5 секунд, обновляя список. Кроме того, я также слушаю нажатие кнопки.Создание нескольких runloops, которые делят данные

Так что мне нужны две независимые петли (вытаскивание данных и прослушивание физической кнопки на малиневой Pi через GPIO), и им нужен доступ к общему списку.

Для всего лишь одного цикла я мог бы использовать простой while = True с time.sleep(5.0), но как я могу работать с двумя бесконечными циклами запуска в то же время, что и доступ к общей переменной, и не блокирование друг друга? Также нажатие кнопки должно всегда быть отзывчивым.

Как это сделать? Мне нужны потоки для этого?

+0

Не обязательно, вы можете использовать 'asyncio' –

+0

@WayneWerner Я на Python 2.7. Асинчио все еще есть вариант? – Bernd

+0

Если вы хотите использовать 'asyncio' в python 2.7, вы можете использовать [Trollius] (https://pypi.python.org/pypi/trollius) –

ответ

0

Итак, если я правильно понимаю вас, проблема заключается в том, что вы хотите, чтобы цикл проверки кнопки выполнялся каждый раз, скажем, миллисекунды, в то время как цикл опроса вашего сервера должен выполняться каждые 5 секунд. Это верно?

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

Для реализации 5-секундного интервала внутри быстрого цикла, вы могли бы сделать что-то вроде

import datetime 

# [...] other code 

# inside fast loop 
if last_poll_time - datetime.now() >= 5: 
    poll_again() 
    last_poll_time = datetime.now() 
Смежные вопросы