gpt4 book ai didi

python - Pyramid 网络应用程序中的长时间运行任务

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:34 27 4
gpt4 key购买 nike

我需要在不阻塞 View 的情况下在 Web 应用程序的后台运行一些任务(检查代码等)。

典型的 Queue/Celery 场景中的转折是我必须确保任务将完成,即使 web 应用程序崩溃或重新启动仍然存在,直到这些任务完成,无论如何他们的最终结果。

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

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

最佳答案

我建议你使用 Celery。

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

从网络服务器进程启动长时间运行的任务的问题在于,在生产环境中,网络“ worker ”通常由网络服务器管理——多个 worker 可以随时产生或终止。您的方法的可行性在很大程度上取决于您使用的 Web 服务器及其配置。此外,如果多个工作人员各自尝试执行一项任务,您可能会遇到一些并发问题。

除了 Celery,另一种选择是查看 UWSGI's spooler subsystem ,尤其是当您已经在使用 UWSGI 时。

关于python - Pyramid 网络应用程序中的长时间运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26195632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com