为Web应用程序运行重复任务

时间:2011-12-21 14:08:03

标签: python cron

这似乎是一个简单的问题,但我找不到答案。

我正在制作一个需要不断运行任务的网络应用程序。

我将使用PingdomTwitterfeed等网站作为类比。正如您所知,Pingdom会检查正常运行时间,因此不断检查网站以查看它们是否已启动,Twitterfeed会检查RSS源以查看它们是否已更改,然后发推文。我还需要运行一个简单的脚本来遍历数据库中的URL并对它们执行操作。

我的问题是:我该如何实现?我熟悉cron,目前用它来进行我的服务器备份。这会是要走的路吗?

我知道如何制作一个无限运行的Python脚本,当我完成时,从数据库中的下一个URL开始。我应该在服务器上运行吗?我怎么知道它总是在运行而且不会崩溃或什么?

我希望这个问题有道理,我希望我不会重复别人或其他任何事情。

谢谢,

萨姆

编辑:要明确,我需要不断运行的任务。如图所示,检查数据库中的URL 1,检查数据库中的URl 2,检查URL 3,当它到达最后一个时,返回到开头。谢谢!

2 个答案:

答案 0 :(得分:1)

如果您需要可以从命令行运行任务的可重复运行 - 这就是cron最适合的任务。 我没有看到这种方法的任何缺点。

<强>更新 好的,我看到这个问题有些不同。现在我看到了几个解决方案:

  • 以设定的时间间隔运行cron任务,让它每次运行一次处理数据,下次它将在另一次运行时处理数据;使用PID /数据库/信号量来避免并行进程;
  • 更新在数据库中插入/更新数据的进程;在插入/更新信息时处理信息; c)
  • 写一个恶魔进程,它将驻留在内存中并实时检查数据。

答案 1 :(得分:1)

cron肯定是一种方法,以及您可能更喜欢的任何其他任务调度程序。

主要观点在您的问题的标题中:

  

为网络应用运行重复任务

后台任务和Web应用程序应分开。他们可以共享代码,他们可以共享数据库的访问权限,但它们应该是独立的和离散的应用程序上下文。 (将它们视为访问相同后端逻辑的单独UI。)

这样做的主要原因是因为Web应用程序和后台进程在体系结构上非常不同,并不是要混合使用。考虑Web服务器(Apache,IIS等)中保存的Web应用程序的结构。应用程序什么时候“运行”?什么时候“开”?这不是一个真正的运行任务。它是一个服务,等待输入(请求)处理和生成输出(响应)然后再回到等待。

Web应用程序用于响应请求。计划任务或守护程序作业用于在后台运行重复的进程。保持两者分开将使您对这两者的管理变得更加容易。