В Python запускается функция запланированного события и функция цикла loop с многопроцессорной обработкой с пулом - PullRequest
0 голосов
/ 21 октября 2019

У меня есть две функции. Один из них - celen (), который проверяет календарь и составляет расписание для выполнения чего-либо, а другой - бесконечный цикл while, tech (). Я пытался запустить многопроцессорную работу, не мог видеть что-либо, печатающее на оболочке, и в итоге выполнил следующий код, по крайней мере, показывающий вывод первого процесса.

Но, хотя первый процесс / событие календаря с запущенным apsscheduler показывает все ожидающие задания, второе задание / функция, бесконечный цикл не запускается!

Как я могузапустить как с многопроцессорным / подпроцессным / многопоточным, в то время как я по-прежнему вижу вывод в оболочке или из любой другой функции?

def trade():
      return(calen(),tech())

with Pool(cpu_count()) as p:
      results = p.map(trade())
      print(list(results))

Ранее я также пытался

if __name__ == '__main__':
    with Pool(processes=2) as pool:
        r1 = pool.apply_async(calen, ())
        r2 = pool.apply_async(tech, ())

        print(r1.get(timeout=120))
        print(r2.get(timeout=120))

Я буду признателен, еслилюбой может решить, как запускать цикл и запланированное событие вместе, пока выходные данные видны.

1 Ответ

0 голосов
/ 22 октября 2019

Я думаю, что я делаю ошибку с Apscheduler. Apschduler самопроизвольно запускает многопроцессорную работу с schdule, а также в цикле interval / while.

Цикл while должен выполняться из apscheduler, а не как отдельная функция.

Вместо этого я пытаюсь сделать как отдельную, однус apsscheduler и другим обычным циклом while. Когда apscheduler запустил, он блокировал любую другую операцию.

Это помогло мне https://devcenter.heroku.com/articles/clock-processes-python

На самом деле это также хорошее решение для многопроцессорных систем (насколько я понял)

from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()

@sched.scheduled_job('interval', minutes=3)
def timed_job():
    print('This job is run every three minutes.')

@sched.scheduled_job('cron', day_of_week='mon-fri', hour=17)
def scheduled_job():
    print('This job is run every weekday at 5pm.')

sched.start()
...