Python Список GPIO для l oop, но не ждите завершения - PullRequest
0 голосов
/ 17 июня 2020

На моем Raspberry я использую порты GPIO для включения и выключения света. Итак, в Python я составил список заданий, в которых job имеет продолжительность и порт.

, поэтому базовый сценарий c будет выглядеть примерно так:

def do_jobs(jobs):
    for job in jobs:
        do_work(job)

def do_work(job):
    try:
        duration = int(job.Duration)
        gpioPort = int(job.Port)
        logger.debug(f'Setting GPIO mode to BCM')
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(gpioPort, GPIO.OUT)
        logger.info(f'Turning ON GPIO port {gpioPort} for a duration of {duration} seconds')
        GPIO.output(job, GPIO.HIGH)
        time.sleep(duration)
        logger.info(f'Turning OFF GPIO port {gpioPort}')
        GPIO.output(item, GPIO.LOW)

    except Exception as e:
        logger.error("Unexpected error:" + str(e))
    finally:
        logger.info(f'Cleaning up GPIO ports!')
        GPIO.cleanup()

Теоретически в этом списке заданий может быть несколько заданий, которые необходимо запускать одновременно или с разницей в несколько минут; например, несколько источников света должны включаться одновременно, или первый имеет продолжительность 1 час и начинается в 20:00, а следующий хочет начать в 20:05 в течение часа.

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

...