如何使用python Scheduler库运行并行任务?

时间:2019-01-27 14:46:57

标签: python scheduler taskscheduler

使用python Scheduler库以多核cpu运行并行任务的方法是什么?

在这个并行任务示例中,是否有添加超时和一些顺序相关元素以及异常处理的示例?

2 个答案:

答案 0 :(得分:0)

由于您根本没有发布任何代码,因此很难确定您要询问的内容以及要实现的目标。

话虽如此,我想如果您想在python中实现 True 并行性,则要使用的库应为multiprocessing。使用multiprocessing,您可以从主进程中启动独立的python进程,并使它们同时在不同的物理内核上运行。

如果任务是相互依赖的,那么您需要使用QueuesPipes之类的进程间通信技术或multiprocessing库本身提供的{{1} } multiprocessingarrayvalue multiprocessing

对于独立任务,您不必担心同步流程状态,但是,如果您需要合并独立任务的结果,则可以使用Manager multiprocessing和{{1 }}。

但是,如果您打算做的是同时执行任务并不想浪费任何CPU时间,则可以查看pool库,尽管map有其自身的复杂之处,{ {1}}是最大的一个。

threading是您要研究的另一种范式,它采用完全不同的并发方法,但是threading有其自己的生态系统,并且该生态系统的所有部分都需要实际实现所需的最终结果否则整个事情都会炸毁。

答案 1 :(得分:0)

如果您正在寻找使用多处理进行调度,那么 simple-scheduler 应该可以完成您的工作。

  • 不错过未来的活动。
  • 使用轻量级多处理来安排作业。
  • 此套餐仅使用 24 小时制。
  • 同时安排任意数量的作业。
  • 要精确安排重复性作业。
  • 要在一分钟内执行的事件作业。
  • 即使在<执行时间
  • 期间也能工作
  • 再次使用不同的 job_name 调度相同的函数
  • 执行失败时,设置重试次数。
  • 控制每次重新尝试之间的持续时间。
  • 仅在后台工作,因此易于跨平台集成(例如烧瓶)

例如

from time import sleep, ctime, time
from simple_scheduler.event import event_scheduler

event_scheduler.timezones()
TZ = "Asia/Kolkata"
WHEN = ["mon|09:**", "*|10:45"] #[mon/tue/wed/thu/fri/sat/sun] or "*" for all days

# correct argument precedence in a function
def print_args(a, b=1, *args, **kwargs):
    print(ctime(time()), a, b, args, kwargs)
# the above print_args function would be called twice,
# so to differentiate between then use "job_name"

event_scheduler.add_job(target = print_args,
                        args = (0,), # don't forget "," for single arguments
                        kwargs = {"b":2},
                        when = WHEN,
                        tz = TZ,
                        job_name = "print-args-1")
event_scheduler.add_job(target= print_args,
                        args = (0, 2, "arg1", "arg2"),
                        kwargs = {"key1":"value1",
                                  "key2":"value2"},
                        when = WHEN,
                        tz = TZ,
                        job_name = "print-args-2")

event_scheduler.verbose = True # (default)
event_scheduler.job_summary()
event_scheduler.run()
event_scheduler.job_summary()

sleep(200)
event_scheduler.remove_job("print-args-2")

sleep(5)
event_scheduler.clear()