我正在使用guv
和feedparser
同时解析多个Feed。以下是我的代码:
guv.monkey_patch(time=True, socket=True)
def parse_feed(_feed):
return feedparser.parse(_feed)
def main():
urls = ["http://feeds.bbci.co.uk/news/rss.xml"]
pool = guv.GreenPool()
results = pool.starmap(parse_feed, zip(urls))
for resp in results:
print(str(resp))
但是,我得到以下输出:
{'bozo_exception': TypeError('a float is required',), 'bozo': 1, 'feed': {}, 'entries': []}
我在使用Eventlet
时遇到类似问题,但在本机Python 3 threading
库中却没有。
答案 0 :(得分:0)
我无法在本地安装guv
模块,因此我无法逐字测试您的代码,但如果我使用eventlet.greenpool.GreenPool
,则一切正常:
import feedparser
import eventlet.greenpool
def parse_feed(_feed):
print 'PARSE:', _feed
return feedparser.parse(_feed)
def main():
urls = ["http://feeds.bbci.co.uk/news/rss.xml"]
pool = eventlet.greenpool.GreenPool()
results = pool.starmap(parse_feed, zip(urls))
for resp in results:
print resp
main()
我也看到了itertools.starmap()
的正确行为。您是否有可能看到某种瞬态错误?