Кажется, что getaddrinfo() блокируется при использовании eventlet

Я запускаю свои задачи Django-сельдерея, используя eventlet Но что-то все еще блокирует. Я использовал обнаружение блокировки eventlet и обнаружил, что getaddrinfo() блокирует. Я где-то читал, что мне нужно установить пакет "dnspython", но это не имеет значения, с или без. На данный момент установлено:

dnspython                 - A DNS toolkit for Python
  INSTALLED: 1.11.0 (latest)

Также забавно, что блокировка появляется где-то внутри кода eventlet (eventlet.green.socket).

Я бегу из сельдерея вот так:

/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 (его части):

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)

Это ошибка, которую я получаю:

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)",)'

У вас есть какие-либо подсказки, как это исправить? Это не имеет смысла для меня.

Заранее спасибо, Матиас

1 ответ

Вы можете начать с удаления os.environ["EVENTLET_NOPATCH"] = 'True'Потому что это вводит в заблуждение. Это ничего не делает. Eventlet никогда не поддерживал эту переменную среды.

Затем попробуйте выполнить этот код:

from eventlet.green import socket
print(socket.getaddrinfo.__module__)
Другие вопросы по тегам