制作Python调度器的最佳方法

3 投票
3 回答
3426 浏览
提问于 2025-04-17 22:35

我正在使用 scrapy 0.20 和 python 2.7

问题

哪个是最好的 Python 调度器?

我的需求

我需要每三小时运行一次我的爬虫,也就是一个 Python 脚本

我考虑过的方案

  1. 我尝试使用 Windows 7 自带的任务调度功能,效果不错。我可以每三小时运行一次 Python 脚本,但如果我把脚本部署到 Linux 服务器上,就不能使用这个选项了。
  2. 我用 Quartz-Scheduler 创建了一个 Java 应用程序,运行得很好,但这是一个第三方库,我的经理可能会拒绝使用。
  3. 我创建了一个 Windows 服务,让它每三小时执行一次脚本,这也能工作,但如果我把 Python 脚本部署到 Linux 服务器上,就不能用这个选项了。

我在询问执行 Python 脚本的最佳实践。

3 个回答

1

好吧,总是有一个很不错的sched模块,文档里有介绍,它提供了一个通用的调度接口。

你只需要给它一个time函数和一个sleep函数,它就能给你一个相当不错且可扩展的调度器。

虽然它不是系统级别的,但如果你能把它当作一个服务来运行,那应该就足够用了。

4

我尝试使用Windows 7自带的任务调度功能,效果很好。

所以这对你来说已经很好用了。不错,不需要改动你的脚本来自己做调度工作。

但我可能会把我的Python脚本部署在Linux服务器上,所以可能无法使用这个选项。

在Linux上,你可以使用cron作业来实现这个功能。


另一种方法是让你的脚本一直运行,但在你不需要它工作的三小时内暂停它。这样你就不需要在目标机器上设置任何东西,只需在后台运行脚本,它会一直运行并完成它的工作。

顺便说一下,这正是任务调度程序的工作原理。它们在操作系统启动时就被启动,然后就一直运行,每隔一段时间(大约一分钟)检查一下是否有需要现在执行的任务。如果有,它们就会启动一个新进程来运行这个任务。

所以如果你想在Python中制作这样的调度程序,你只需让它一直运行,然后每隔一段时间(在你的情况下是三小时,因为你只有一个任务),就开始执行你的任务。这可以在一个单独的进程中,也可以在一个单独的线程中,或者通过异步函数间接在一个单独的线程中执行。

撰写回答