enp*_*nax 6 python django multithreading gevent gunicorn
我们最近切换到Gunicorn使用GEVENT工人.
在我们的网站上,我们有一些需要一段时间才能完成的任务.超过30秒.
我们已经完成了整个芹菜的事情,但这些任务很少运行,以至于不能让芹菜和redis一直运行.我们只是不想那样.我们也不想按需开始芹菜和红葡萄酒.我们想要摆脱它.(我为此感到抱歉,但我想阻止这样的答案:"为什么不使用芹菜,这太好了!")
我说的是执行3000个SQL查询(插入)的任务,这些查询必须一个接一个地执行.这种情况并非经常发生.我们仅限于同时运行其中两项任务.他们应该花2-3分钟.
现在,我们现在正在做的是利用gevent worker和gevent.spawn任务并返回响应.
我发现生成的线程实际上是阻塞的.一旦返回响应,任务就会开始运行,并且在任务停止运行之前不会处理任何其他请求.任务将在30多岁后被枪杀timeout.为了防止这种情况,我time.sleep()在每个其他SQL查询之后使用,因此服务器有机会响应请求,但我不觉得这是重点.
我们运行gunicorn,django并使用gevent.描述的行为发生在我的开发环境中并使用1 gevent worker.在生产中,我们也只运行一名工人(现在).此外,在任务阻塞时,运行2名工作人员似乎无助于提供更多请求.
谢谢!
enp*_*nax -2
我已经决定使用synchronous(标准)工人并使用图书馆multiprocessing。这似乎是目前最简单的解决方案。
我还实现了一个全局池,滥用memcached提供锁的缓存,因此只能运行两个任务。
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |