金字塔网络应用程序中长时间运行的任务

2024-04-24 12:02:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

典型的Queue/Celery场景中的转折点是,我必须确保任务能够完成,即使web应用程序崩溃或重新启动,也不会影响这些任务的完成,不管它们的最终结果如何。在

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

更新:为什么芹菜本身不呢?好吧,我在一些项目中使用了Celery,它确实是一个很好的解决方案,但对于这个任务来说,它是一个大的方面:它需要一个单独的服务器、通信等,而我只需要生成一些进程/线程,在其中做一些工作(git clone ...svn co ...),并检查它们是否成功或失败。另一个问题是,我需要尽可能小的解决方案,因为我必须使它遵循详细的公司指导方针、程序等,而我必须经历的人力行政和官僚管理费用,我宁愿避免,如果我可以。在


Tags: 代码视图web数据库应用程序queue记录场景
1条回答
网友
1楼 · 发布于 2024-04-24 12:02:23

我建议你用芹菜。在

芹菜不需要自己的服务器,你可以让一个工人在同一台机器上运行。您还可以使用SQL数据库而不是“真正的”队列/消息服务器(如RabbitMQ)来创建“穷人的队列”——此设置看起来非常像您所描述的,只是有一个单独的进程来执行长时间运行的任务。在

从web服务器进程启动长时间运行任务的问题是,在生产环境中,web“workers”通常由web服务器管理—可以随时生成或终止多个Worker。您的方法的可行性在很大程度上取决于您使用的web服务器及其配置。另外,由于多个worker都在尝试执行一个任务,您可能会遇到一些并发问题。在

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

相关问题 更多 >