我正在开发一个 django Web 应用程序,该应用程序具有需要很长时间才能返回的功能(例如 sync_files())。当我使用 gevent 时,我的应用程序在 sync_file() 运行时不会阻塞,其他客户端可以很好地连接并与 Web 应用程序交互。
我的目标是让 Web 应用程序响应其他客户端而不是阻止。我不希望有无数用户连接到我的网络应用程序(可能最多 20 个连接),我不想将其设置为下一个 twitter。我的应用程序在 vps 上运行,所以我需要一些轻量级的东西。
因此,在上面列出的我的情况下,当我使用 gevent 时使用芹菜是多余的吗?使用芹菜有什么特别的好处吗?我不喜欢使用芹菜,因为它是将在我的机器上运行的另一项服务。
编辑:发现芹菜可以在Gevent上运行工人池。我想我对gevent和芹菜之间的关系有点不确定。
你确实需要芹菜。
即使您使用 gevent 并具有并发性,问题也会变成请求超时。假设您的任务需要 10 分钟才能运行,但典型的请求超时大约长达一分钟。因此,如果您直接在视图中触发任务,会发生什么是服务器将开始处理它,但是一分钟后客户端(浏览器)可能会断开连接,因为它会认为服务器处于脱机状态。因此,您的数据可能会损坏,因为您无法保证连接关闭时会发生什么。Celery 解决了这个问题,因为它将触发一个后台进程,该进程将独立于视图处理任务。因此,用户将立即获得视图响应,同时服务器将开始处理任务。这是处理任何需要大量处理的方案的正确模式。