Pyramid web app中的长时间运行任务

时间:2014-10-04 18:05:04

标签: python queue pyramid background-process pylons

我需要在Web应用程序的后台运行一些任务(检查代码等),而不会阻止视图。

典型的Queue / Celery方案中的扭曲是我必须确保任务完成,即使是网络应用程序崩溃或重新启动,直到这些任务完成,无论其最终结果如何。

我在考虑在数据库中记录multiprocessing.Pool的参数,并在webapp restart时启动所有未完成的任务。这是可行的,但我想知道是否有更简单或更具成本效益的方法?

更新:为什么不是芹菜本身?好吧,我在一些项目中使用了Celery,它确实是一个很好的解决方案,但是对于这个任务来说它很重要:它需要一个单独的服务器,通信等,而我需要的只是产卵一些进程/线程,在其中执行一些工作(git clone ...svn co ...)并检查它们是成功还是失败。另一个问题是我需要尽可能小的解决方案,因为我必须遵循精心制作的公司指导方针,程序等,以及我必须通过人力管理和官僚主义的开销来获得Celery船上如果可以的话,我宁愿避免这样做。

1 个答案:

答案 0 :(得分:2)

我建议你使用芹菜。

Celery不需要自己的服务器,您可以在同一台机器上运行工作程序。您还可以使用SQL数据库而不是像“RabbitMQ”这样的“真实”队列/消息服务器来拥有“穷人的队列” - 这种设置看起来非常像您所描述的,只需要一个单独的进程来执行正在运行的任务。

从Web服务器进程启动长时间运行任务的问题在于,在生产环境中,Web“工作者”通常由Web服务器管理 - 可以随时生成或杀死多个工作者。您的方法的可行性在很大程度上取决于您正在使用的Web服务器及其配置。此外,对于每个尝试执行任务的多个工作人员,您可能会遇到一些并发问题。

除Celery外,另一个选择是查看UWSGI's spooler subsystem,特别是如果您已经在使用UWSGI。