Cron作业与高级Python调度程序

时间:2016-04-16 09:24:04

标签: python cron

如果你想运行你的python脚本,让我们说每天下午6点,最好是使用crontab条目或高级Python调度程序解决方案关于电源,内存,CPU ......消费

因此,在我看来,做一个crone工作会更好,因为我没有看到永久运行Advanced Python Scheduler的优势。

4 个答案:

答案 0 :(得分:4)

如果满足两个条件,您应该使用cron;

  1. 它可以在您的代码需要运行的所有平台上使用。
  2. 在设定的时间内启动脚本就足以满足您的需求。
  3. 镜像这些是构建自己的解决方案的两个原因:

    1. 您的程序需要可以在许多操作系统上移植,包括那些没有cron可用的操作系统。 (如ms-windows)
    2. 您需要以不同于设定的开始时间的方式安排事情。例如。在设定的时间间隔内,或者如果遇到其他一些条件。

答案 1 :(得分:2)

从资源的角度来看,同意的cron更好。 从功能的角度来看,如果您的要求是在特定时间运行脚本或定期安排脚本,那么cronjob会更好。但如果您的要求更复杂,您应该查看Advance Python Schedular

希望它有所帮助。

答案 2 :(得分:2)

我也同意cron更好。但是当您想要选择解决方案时,您应该考虑具体要求。有时您可以使用Celery来执行此操作。

Celery是基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。

答案 3 :(得分:0)

如果您想尝试第三个选项,请参阅simple-scheduler

  • 即使在<执行时间
  • 期间也能工作
  • 使用轻量级多处理
  • 适用于事件和递归函数
  • 可以同时安排任意数量的工作,而且不会错过任何一个。
  • 默认在后台工作(因此无需单独的代码,因此易于集成,例如烧瓶)
  • 可以使用不同的作业名称再次安排相同的功能
  • 如果执行失败,您可以自己设置重试次数
  • 每次尝试之间的持续时间也由您控制

示例:

from time import sleep, ctime, time
from simple_scheduler.recurring import recurring_scheduler

def wait_10_secs(t):
    wait_t_secs(10)

def wait_t_secs(t):
    began_at = ctime(time())
    sleep(t)
    print(f"I waited {t} seconds. [From: {began_at} to {ctime(time())}]")
# the above wait_t_secs function would be called twice,
# so to differentiate between then use "job_name"

recurring_scheduler.add_job(target=wait_10_secs,
                            period_in_seconds=5, # period < execution time
                            job_name="ten",
                            kwargs={"t":10})
recurring_scheduler.add_job(target=wait_t_secs,
                            kwargs={"t":7}, # period < execution time
                            period_in_seconds=5,
                            job_name="seven")
recurring_scheduler.add_job(target=wait_t_secs,
                            kwargs={"t":3}, # period > execution time
                            period_in_seconds=5,
                            job_name="three")

recurring_scheduler.verbose = True # (default)

recurring_scheduler.job_summary()
recurring_scheduler.run()
recurring_scheduler.job_summary()

sleep(10)
print("Removing job with name 'ten'...")
recurring_scheduler.remove_job("ten")

sleep(10)
print("Removing job with name 'ten'...")
recurring_scheduler.remove_job("ten")

sleep(10)
print("Stopping and clearing the scheduler.\n")
recurring_scheduler.clear()