首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用eventlet时,getaddrinfo()似乎会阻塞

使用eventlet时,getaddrinfo()似乎会阻塞
EN

Stack Overflow用户
提问于 2013-08-06 15:06:09
回答 1查看 508关注 0票数 0

我使用eventlet运行我的Django-celery任务。但还是有一些东西在阻挡着。我使用了eventlet的阻塞检测,发现getaddrinfo()正在阻塞。我在某处读到我必须安装"dnspython“包,但无论是否安装都没有区别。它在当前安装:

代码语言:javascript
运行
复制
dnspython                 - A DNS toolkit for Python
  INSTALLED: 1.11.0 (latest)

有趣的是,阻塞出现在eventlet代码(eventlet.green.socket)中的某个地方。

我像这样运行芹菜:

代码语言:javascript
运行
复制
/var/www/myproject/async_manage.py celeryd -B \
     --schedule=/var/www/myproject/celerybeat-schedule \
     --loglevel=INFO -P eventlet -c 1000 \
     --settings=myproject.settings.myproject_deployment

我的自定义async_manage.py (部分):

代码语言:javascript
运行
复制
import pymysql
pymysql.install_as_MySQLdb()

import eventlet
import eventlet.debug

os.environ["EVENTLET_NOPATCH"] = 'True'
eventlet.monkey_patch()
eventlet.debug.hub_prevent_multiple_readers(False)
eventlet.debug.hub_blocking_detection(True, 0.1)

if __name__ == "__main__":
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)

这是我得到的错误:

代码语言:javascript
运行
复制
Task myproject.apps.myapp.tasks.mytask with id f8794028-699e-43ba-b48f-3d81b7614f1f raised exception:
'RuntimeError("Blocking detector ALARMED atTraceback(filename=\'/var/www/virtualenvs/myproject/local/lib/python2.7/site-packages/eventlet/green/socket.py\', lineno=43, function=\'create_connection\', code_context=[\'    for res in getaddrinfo(host, port, 0, SOCK_STREAM):\\\\n\'], index=0)",)'

你有什么办法解决这个问题吗?这对我来说毫无意义。

提前谢谢你,马蒂亚斯

EN

回答 1

Stack Overflow用户

发布于 2013-08-06 19:11:10

您可以从删除os.environ["EVENTLET_NOPATCH"] = 'True'开始,因为它具有误导性。它不会做任何事情。Eventlet从未支持过此环境变量。

然后,尝试执行以下代码:

代码语言:javascript
运行
复制
from eventlet.green import socket
print(socket.getaddrinfo.__module__)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18073717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档