【发布时间】:2013-12-05 01:49:35
【问题描述】:
想法很简单:我需要并行发送多个 HTTP 请求。
我决定为此使用requests-futures 库,它基本上会产生多个线程。
现在,我有大约 200 个请求,但速度仍然很慢(在我的笔记本电脑上大约需要 12 秒)。我还使用回调来解析响应 json(如库文档中所建议的那样)。另外,是否有经验法则可以根据请求数计算出最佳线程数,有吗?
基本上,我想知道是否可以进一步加快这些请求的速度。
【问题讨论】:
-
什么版本的python?您的 stdlib 选项从 2.7 到 3.3 发生了巨大变化。
-
我打算建议使用 urllib + Threading 模块,但你链接到的包基本上做同样的事情。至于调整线程数,我在笔记本电脑(MacBook Pro,3.2 GHz 处理器,16 GB RAM)上运行了 25 个左右没有问题。
-
@roippi 我正在使用 python 3.3
-
@BenDundee 您发送了多少请求,性能如何?
-
@NikolayDerkach:我无法直接回答您的问题,但我有两个单独的示例,其中我使用了线程 POST 或 GET 之类的东西。最接近您的情况是使用
pyelasticsearch(它使用 requests 库)发布 JSON(查询)弹性索引。将这些查询线程化后,我通常会在 20-30 分钟内跨 5 个线程执行 15000 个 POST(我不能使用更多,或者我会收到来自平台人员的疯狂电子邮件)。有几百 KB 的有效负载。无论如何,我很难相信requests的性能明显高于或低于urllib。
标签: python multithreading http python-3.x concurrency