0
我使用eventlet運行我的Django-celery任務。但有些東西仍然阻塞。我使用了eventlet的阻塞檢測,並發現getaddrinfo()被阻塞。我在某處讀過我必須安裝「dnspython」軟件包,但是它有沒有區別。它現在安裝:getaddrinfo()在使用eventlet時似乎阻塞
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)",)'
待辦事項你有任何線索如何解決這個問題?這對我來說沒有意義。
由於提前, 馬蒂亞斯
這是爲什麼?你有沒有進一步的解釋?我其實從這裏複製它:https://gist.github.com/joshbohde/821848 –
@MatthiasScholz請看到更新的答案 – temoto