我正在使用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)
我的问题是,当同时安排大量任务时,由于进程数量多,服务器崩溃。
因此,我需要此应用程序可扩展以支持许多用户。
有谁知道如何为我的用例创建可扩展的解决方案?
一种解决方案是水平添加更多硬件(获取更多服务器(。
例如,使用 Redis 将请求添加到任务队列,然后使用 Celery 工作线程委派任务,并运行许多并行应用程序来获取工作负载
另一种解决方案是为Apache Airflow设置一个集群,然后通过它运行任务。
不能因为其他任务而被阻止或延迟执行
不幸的是,这不是任务调度的工作方式。最终,您将拥有相互依赖的作业,因此您必须拥有业务流程的DAG
。