На моем 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?