2013-04-24 2 views
0

У меня есть файл с миллиона URLs, как: файл данных, как:`внутренняя ошибка в evhttp` использовании GEvent

http://wonderland.cjfallon.ie/ 
http://www.youtube.com/ 
http://www.starfall.com/ 
http://education.scholastic.co.uk/ 
http://www.scoilnet.ie/ 
http://www.nessy.com/ 
http://www.senteacher.org/ 
http://scoop.it/ 
http://www.moviemaker.com/ 
http://learni.st/ 
http://www.twitter.com/ 
http://www.facebook.com/ 
http://www.gutenberg.org/ 
http://www.gutenberg.org/cache/epub/42361/pg42361.txt 

Я хочу, чтобы сканировать их, так что граница сети IO, так что я хочу использовать несколько потоков или gevent для его решения.

мои несколько потоков код хорошо работает: https://gist.github.com/young001/5449751

, но при использовании GEvent, код: https://gist.github.com/young001/baa3eebbf7342c5ac077 всегда идет не так:

status is 200 
status is 200 
Internal error in evhttp 
the url is down http://web2.socialcomputingmagazine.com/the_social_graph_issues_and_strategies_in_2008.htm 

the reason 
status is 200 
status is 200 
status is 200 
status is 200 
status is 200 
status is 200 
status is 301 
status is 200 
status is 301 
status is 200 
status is 200 
Internal error in evhttp 

, а затем он остановился. Я не знаю, почему так получилось?

любая помощь?

кажется, все должно идти хорошо, но это не так, это заставляет меня сходить с ума.

+0

Вырезать ненужный код и добавить правильный импорт вашего образца, чтобы люди могли его запустить. – poolie

+0

Кстати, я надеюсь, что до того, как вы действительно запустите это на миллион URL-адресов, вы делаете это [уважаем «robots.txt»] (http://robotstxt.org). – poolie

ответ

1

Я могу воспроизвести его здесь после исправления вашего образца.

В основном this seems to be a gevent bug, что он иногда дает Internal error in evhttp.

source code says:

# sometimes this happens, don't know why 
sys.stderr.write("Internal error in evhttp\n") 

Вам придется либо отлаживать, что или использовать что-то другое, или просто повторной попытки, когда он выходит из строя.

+0

о, thx poolie, но почему он заглох? traceback говорит «CTraceback (последний последний звонок): Файл« test_urls_from_file.py », строка 55, в print« good url », url Файл« /usr/local/lib/python2.7/dist-packages/ gevent/pool.py ", строка 277, in spawn self._semaphore.acquire() Файл« /usr/local/lib/python2.7/dist-packages/gevent/coros.py », строка 110, в процессе приобретения result = get_hub(). Switch() Файл «/usr/local/lib/python2.7/dist-packages/gevent/hub.py», строка 164, в переключателе return greenlet.switch (self) KeyboardInterrupt « – young001

+0

Да, я тоже это вижу. Я думаю, это какое-то другое следствие ошибки, и, вероятно, это будет сложно повторить. Я предлагаю вам протестировать против gevent head, и если вы все еще видите его там [файл с ошибкой] (https://github.com/surfly/gevent/issues/) (и поместите здесь URL). – poolie