2013-08-06 63 views
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)",)' 

待辦事項你有任何線索如何解決這個問題?這對我來說沒有意義。

由於提前, 馬蒂亞斯

回答

0

您可以去除os.environ["EVENTLET_NOPATCH"] = 'True' 因爲它是誤導性的啓動。它什麼都不做。 Eventlet從不支持這個環境變量。

然後,嘗試執行此代碼:

from eventlet.green import socket 
print(socket.getaddrinfo.__module__) 
+0

這是爲什麼?你有沒有進一步的解釋?我其實從這裏複製它:https://gist.github.com/joshbohde/821848 –

+0

@MatthiasScholz請看到更新的答案 – temoto

相關問題