2014年2月11日火曜日

geventとlxmlを同時に使うとフリーズする

import gevent.monkey
gevent.monkey.patch_socket()
import urllib2
from lxml import html

r = urllib2.urlopen('http://www.yahoo.co.jp')
et = html.parse(r)
上記のようなコードを実行するとhtml.parseで処理が帰ってこずフリーズすることがある。
import gevent.monkey
gevent.monkey.patch_socket()
import urllib2
from lxml import html
from io import StringIO

r = r = StringIO(urllib2.urlopen('http://www.yahoo.co.jp').read().decode('utf-8','replace'))
et = html.parse(r)
urlopenの戻り値を直接使わずにいったんStringIOにデータを格納してからhtml.parseを実行すると、理由はよくわからないがフリーズしなくなる。

0 件のコメント:

コメントを投稿