python - 使用 APScheduler 在 python 中进行并行编程的最佳方法是什么?
问题描述
我正在使用 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
推荐阅读
- java - spring-data-jpa 1.11.16 带游标的存储过程
- swift - swift 为什么要使用扩展程序
- java - 使用 java8 流从多级内部列表中检索数据
- python - AttributeError:“系列”对象没有属性“重塑”
- java - Opengl - GLSL - 在一个浮点数中存储 4 个字节并将其发送到着色器
- logstash - 关于传递给zabbix trapper的ELK-Logstash关键字过滤器
- python - 如何在python中制作正则表达式
- wordpress - 许多带有尾随双斜杠的 URL?
- react-native - 推送不在标签 wix v2 中的屏幕
- java - NoClassDefFoundError:Android 应用程序崩溃