制作Python调度程序的最佳方法

时间:2014-03-16 23:36:15

标签: python python-2.7 scrapy

我在python 2.7上使用scrapy 0.20

问题

什么是最好的python调度程序。

我的需要

我需要每3小时运行一次蜘蛛,这是一个python脚本

我的想法

  1. 我尝试使用Windows 7附带的Windows调度程序功能,它运行良好。我能够每3个小时运行一个python脚本,但我可能会在Linux服务器上部署我的python脚本,所以我可能无法使用此选项。
  2. 我使用Quartz-Scheduler创建了一个Java应用程序。它运作良好,但这是第三个图书馆,我的经理可能拒绝。
  3. 我创建了一个Windows服务,然后我每三个小时触发一次脚本。它可以工作,但我可以在Linux服务器上部署我的python脚本,所以我可能无法使用此选项。
  4. 我在询问解雇python脚本的最佳做法

3 个答案:

答案 0 :(得分:4)

  

我尝试使用Windows 7附带的Windows调度程序功能,但效果很好。

所以这对你来说很好。很好,无需更改脚本来自行安排工作。

  

但我可能会在Linux服务器上部署我的python脚本,因此我可能无法使用此选项。

在Linux上,您可以使用cron jobs来实现此目的。


另一种方法是简单地保持脚本一直运行,但暂停三小时你什么都不做。所以你不需要在目标机器上设置任何东西,只需要在后台运行脚本,它就会继续运行并完成它的工作。

这正是作业调度程序的工作方式。它们在操作系统启动时提前启动,然后它们只是一直运行,并且每隔一小段时间(大约一分钟左右)就会检查列表中是否有任何需要立即运行的作业。如果是这种情况,他们会产生一个新流程并运行这个工作。

因此,如果您想在Python中制作这样的调度程序,您只需要让它永远运行,并且每隔一段时间(在您的情况下为3小时,因为您只有一个工作),您就可以开始工作了。这可以在单独的进程中,在单独的线程中,也可以在使用异步函数的单独线程中间接进行。

答案 1 :(得分:4)

部署/安排scrapy项目的最佳方法是使用scrapyd服务器。

  1. 您应该安装scrapyd。

    sudo-apt get install scrapyd
    
  2. 您将项目配置文件更改为以下内容:

    [deploy:somename]
    url = http://localhost:6800/  ## this the default 
    project = scrapy_project
    
  3. 您在scrapyd服务器下部署项目:

    scrapy deploy somename
    
  4. 您将/etc/scrapyd/conf.d/default-000中的轮询间隔更改为3小时(默认为5秒):

    poll_interval = 10800
    
  5. 您可以将蜘蛛配置为:

    curl http://localhost:6800/schedule.json -d project=scrapy_project -d spider=myspider
    
  6. 您可以使用网络服务来监控您的工作:

    http://localhost:6800/
    
  7. PS:我只是在ubuntu下测试它所以我不确定是否存在Windows版本。如果没有,您可以安装带有ubuntu的VM来启动蜘蛛。

答案 2 :(得分:1)

嗯,总是迷人的 scheddocs)模块,提供通用调度接口。

给它一个time函数和一个sleep函数,它会给你一个非常好的,可扩展的调度程序。

它不是系统级的,但如果你可以将它作为服务运行,那就足够了。