Gunicorn,Django,Gevent:生成的线程正在阻塞

戊烯

我们最近切换到Gunicorn使用GEVENT工人。

在我们的网站上,我们需要完成一些任务。超过30秒。

前言

我们已经完成了整个芹菜工作,但是这些任务很少运行,以至于无法一直保持芹菜和Redis运行。我们只是不想那样。我们也不想按需开始芹菜和Redis。我们要摆脱它。(对此我感到抱歉,但我想避免这样的回答:“为什么不使用芹菜,太好了!”)

我们要异步运行的任务

我说的是执行3000个SQL查询(插入)的任务,这些查询必须一个接一个地执行。这不是经常执行我们也限制一次只能运行其中两个任务。他们应该花2-3分钟的时间

该方法

现在,我们现在正在利用gevent worker和gevent.spawn任务并返回响应。

问题

我发现生成的线程实际上正在阻塞。返回响应后,任务将开始运行,并且在任务停止运行之前不会处理其他任何请求。任务将在30秒钟后被杀死timeout为了防止这种情况,我time.sleep()在所有其他SQL查询之后使用,因此服务器有机会响应请求,但是我不觉得这是关键。

设置

我们运行gunicorn,django并使用gevent。描述的行为发生在我的开发环境中,并使用1个gevent worker。在生产中,我们还将仅运行1个工人(目前)。另外,运行2个工作程序似乎在任务阻塞时无法帮助服务更多请求。

TLDR

  • 我们认为将gevent线程用于2分钟的任务(在芹菜上)是可行的
  • 我们将gunicorn与gevent一起使用,想知道为什么gevent.spawn产生的线程被阻塞
  • 是阻止目的还是我们的设置错误?

谢谢!

戊烯

我已经决定使用一个synchronous(标准)工作者并使用该multiprocessing库。这似乎是目前最简单的解决方案。

我还实现了一个全局池,滥用memcached提供锁定缓存,因此只能运行两个任务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Gunicorn Django线程

来自分类Dev

Gunicorn Django线程

来自分类Dev

django + gunicorn:异步工作者的问题(gevent)

来自分类Dev

如何中断正在IO上阻塞的后台线程?

来自分类Dev

如何生成一个表单而不阻塞主线程?

来自分类Dev

虚假唤醒是否会阻塞所有正在等待的线程,甚至是无关的线程?

来自分类Dev

线程:尽管我正在使用线程,函数似乎作为阻塞循环运行

来自分类Dev

ExecutorService如果执行太多请求,则一个线程线程池正在阻塞队列

来自分类Dev

Uwsgi与gevent vs线程

来自分类Dev

Java线程状态转换,正在等待已阻塞还是可运行?

来自分类Dev

当其他线程正在等待读取时,对串行端口的写入将永远被阻塞

来自分类Dev

如何在Flask Server发送事件的生成器中为睡眠功能配置gunicorn和gevent?

来自分类Dev

线程问题 - 阻塞 UI 线程

来自分类Dev

等待后线程被阻塞

来自分类Dev

异步阻塞线程魔术

来自分类Dev

阻塞线程的调用方法

来自分类Dev

线程消息队列阻塞

来自分类Dev

NSoperationQueue阻塞主线程

来自分类Dev

异步阻塞线程魔术

来自分类Dev

MessageBeep线程阻塞

来自分类Dev

杀死阻塞线程

来自分类Dev

多线程程序被阻塞

来自分类Dev

Vertx 线程阻塞警告

来自分类Dev

Haskell 中的阻塞线程

来自分类Dev

Gunicorn gevent worker 日志记录问题

来自分类Dev

uwsgi + gevent + django在线程中异步测试并发请求?

来自分类Dev

如果线程正在运行诸如接受连接之类的阻塞代码,pthread_cancel是否可以工作?

来自分类Dev

pyqt QThread阻塞主线程

来自分类Dev

NSThread sleepfortimeinterval阻塞主线程