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