5

我正在开发一个 django web 应用程序,该应用程序具有需要很长时间才能返回的功能(例如 sync_files())。当我使用 gevent 时,我的应用程序在 sync_file() 运行时不会阻塞,其他客户端可以很好地连接 webapp 并与之交互。

我的目标是让 webapp 响应其他客户端而不是阻塞。我不希望有无数用户连接到我的 web 应用程序(可能最多 20 个连接),我不想将其设置为下一个 twitter。我的应用程序在 vps 上运行,所以我需要一些轻量级的东西。

所以在我上面列出的情况下,当我使用 gevent 时使用 celery 是多余的吗?使用芹菜有什么特别的好处吗?我不喜欢使用 celery,因为它是另一个将在我的机器上运行的服务。

编辑:发现 celery 可以在 gevent 上运行工作池。我想我对 gevent 和 celery 之间的关系有点不确定。

4

1 回答 1

6

简而言之,您确实需要芹菜。

即使您使用 gevent 并具有并发性,问题也会变成请求超时。假设您的任务需要 10 分钟才能运行,但是典型的请求超时大约是一分钟。因此,如果您直接在视图中触发任务会发生什么,服务器将开始处理它,但是一分钟后客户端(浏览器)可能会断开连接,因为它会认为服务器处于脱机状态。结果,您的数据可能会损坏,因为您无法保证连接关闭时会发生什么。Celery 解决了这个问题,因为它会触发一个后台进程,该进程将独立于视图处理任务。因此用户将立即获得视图响应,同时服务器将开始处理任务。这是处理任何需要大量处理的场景的正确模式。

于 2013-09-24T22:07:24.787 回答