Друзья подскажите как реализовать многозадачность в питоне на примере? Чтобы воспроизводилась мелодия и мигали светодиоды одновременно. Очень мало примеров в сети. import RPi.GPIO as GPIO import time import os GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(21, GPIO.OUT) GPIO.setmode(GPIO.BCM) GPIO.setup(22, GPIO.OUT) while True: GPIutput(21, GPIO.LOW) time.sleep(0.2) GPIutput(21, GPIO.HIGH) time.sleep(0.2) GPIutput(22, GPIO.LOW) time.sleep(0.2) GPIutput(22, GPIO.HIGH) time.sleep(0.2) os.system('omxplayer /../home/pi/almyra.wav')
А может лучше использовать для этого.... Нужен будет один выход + ШИМ... http://raspberrypi.ru/blog/readblog/50.html
Так и делайте в Пайтоне..... Вариантов 2 Первый Мигаете светодиодами очень часто... Второй Используете какую то логическую схему и передаете биты одним из выходов GPIO
В документации попадалась такая возможность. И это есть. Но смогу ответить только вечером (после 18:00 по Москве) - с приложением файла описания PYTHON и примером из него. Но мне кажется разумнее это делать на СИ. Но если не в терпёж, посмотрите: Параллельная многозадачность threading - встроенный в python модуль для реализации многозадачности с помощью тредов (объекты языка, выполняющиеся в одном процессе). Минусы подхода в том, что вы не можете загрузить вычислениями более одного ядра. multiprocessing - встроенный в python модуль для реализации многозадачности с помощью процессов celery - навороченная реализация очереди задач, поддерживающая различные бэкенды для хранения этой самой очереди задач. RQ - легковесная очередь задач, использующая redis.
Угу Программирование на Python: Часть 9. Процессы и потоки https://www.ibm.com/developerworks/ru/library/l-python_part_9/
в начало поставьте вот это: from threading import Thread и перед циклом запустите Thread(target=os.system('omxplayer /../home/pi/almyra.wav')).start() P.S.Импортируйте из библиотек только то, чем будете пользоваться
DZIDBAEV - ответил, точнее дал ссылку на конкретный пункт. У меня документ с этим. Ребята уже достаточно помогли вам. Но вечером смогу доставить свой вариант - вряд ли по смыслу отличается от всего уже показанного.
Должен огорчить - в подробностях DZIDBAEV ответил куда круче. Но документ - может сгодится: book-ods-2_____.pdf но я думаю, что как и везде - поток организовывается как цикл, только вот не знаю для оптимального переключения требуется ли sleep как везде или в python всё в автомате. в СИ для переключения потока - sleep (usleep) - постановка в очередь. Правда есть ещё и "отделяемые потоки", которым это требование по барабану - но для работы применять mutex (кстати про очерёдность доступа). Простите - я плохо представляю интерпретатор как многозадачную систему - но это есть. И питоном пользуюсь только для испытания методов.
Кстати, как вариант.... Можно было бы сделать 2 приложения. Одно на Сях, которое бы просто воспроизводило музыку. Второе бы на пайтоне мигало светодиодами... Это в принципе гораздо более удобный вариант