Как лучше всего выполнять параллельное программирование в python с помощью APScheduler? - PullRequest
0 голосов
/ 20 июня 2020

Я использую APScheduler для планирования задач в python, и эти задачи должны выполняться независимо и одновременно с другими задачами.

Главное правило состоит в том, что эти задачи должны выполняться в конкретный момент они были запланированы и не могут быть заблокированы или отложить выполнение из-за другой задачи.

Задачи динамически планируются пользователями моего приложения.

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

def _initialize_order_process(user, order):
    p = Process(target=do_scheduled_order, args=(user, order))
    p.start()
    p.join()

Важно знать, что каждый подпроцесс запускает соединение с сервером.

И я планирую свои действия следующим образом:

scheduler.add_job(_initialize_order_process, 'date', run_date=start_time, args=[user, order], id=job_id)

Моя проблема в том, что когда большое количество задач запланировано на одно и то же время, из-за количества процессов происходит сбой сервера.

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

Кто-нибудь знает, как создать масштабируемое решение для моего варианта использования?

1 Ответ

0 голосов
/ 20 июня 2020

Одним из решений было бы добавить больше оборудования по горизонтали (получить больше серверов).

Вы добавляете запросы в очередь задач, например, с помощью Redis, затем делегируете задачи с помощью рабочих Celery и запускаете много параллельных приложения для сбора рабочей нагрузки

Другое решение - настроить кластер для Apache Airflow, а затем запускать через него задачи

невозможно заблокировать или отложить выполнение из-за другой задачи

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...