使用 APScheduler 在 python 中进行并行编程的最佳方法是啥?

Posted

技术标签:

【中文标题】使用 APScheduler 在 python 中进行并行编程的最佳方法是啥?【英文标题】:What is the best way to do parallel programming in python with APScheduler?使用 APScheduler 在 python 中进行并行编程的最佳方法是什么? 【发布时间】:2020-10-10 09:13:56 【问题描述】:

我在python中使用APScheduler来调度任务,这些任务需要独立运行并与其他任务同时运行。

主要规则是这些任务必须在它们被安排的确切时间执行,并且不能因为另一个任务而被阻止或延迟执行。

这些任务是由我的应用程序的用户动态安排的。

为此,当任务执行时间到来时,我启动一个新的子流程来执行它:

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】:

一种解决方案是水平添加更多硬件(获得更多服务器)。

您将请求添加到任务队列,例如,使用 Redis,然后使用 Celery 工作者委派任务,并运行许多并行应用程序来承担工作负载

另一种解决方案是为 Apache Airflow 设置一个集群,然后通过它运行任务

不能因为另一个任务而被阻塞或延迟执行

很遗憾,任务调度并非如此。最终,您将拥有相互依赖的工作,因此您必须拥有工作流程的 DAG

【讨论】:

以上是关于使用 APScheduler 在 python 中进行并行编程的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

python中APScheduler的使用详解(python3经典编程案例)

python中APScheduler的使用详解(python3经典编程案例)

python中APScheduler的使用详解(python3经典编程案例)

Python下APScheduler的简单使用

python(flask)+apscheduler定时邮件重发两次的问题

Python任务调度模块 – APScheduler(摘抄)