Ant*_*ton 6 django asynchronous gunicorn
我使用djutils @async装饰器异步调用函数.当我使用标准./manage.py runserver命令启动我的服务器时,这很有效.但是当我在gunicorn下运行我的django应用程序并且我用@async装饰器调用该函数时根本没有任何事情发生...
我查看了djutils异步装饰器的代码,它添加并反对python标准的Queue,并生成一个或多个线程来使用队列.
任何人有想法或提示我应该在哪里看下一步,让我的@async功能在gunicorn中运行?gunicornn是否正在改变python线程实现的标准实现?
Python 线程会受到全局解释器锁的干扰,而 Gunicorn 很可能会对默认线程行为进行猴子修补。所以你可以尝试改变它的Worker Type。如果您的 Gunicorn 配置为使用 Gevent 的异步工作线程,那么它可能会猴子修补线程,因为 Gevent 可以做到这一点,用协作的“绿色”线程替换线程类。
就我个人而言,我讨厌“以不同的方式做”的答案,很抱歉给出一个答案。不要从 Web 服务器进程内部生成线程或派生进程。只需将该工作卸载到后台队列即可。
如果您有简单的需求,那么构建您自己的后台队列很容易。在数据库中有一个表,用于记录待处理和已完成的作业,并结合每 5 分钟左右执行一次的 cron 脚本,并从那里开始工作。
如果你想要一些稳定且可以扩展的东西,Celery是相当不错的。