首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:简单的异步下载url内容?

Python:简单的异步下载url内容?
EN

Stack Overflow用户
提问于 2009-03-20 22:40:42
回答 10查看 10.1K关注 0票数 9

我有一个响应各种用户请求的web.py服务器。其中一个请求涉及下载和分析一系列网页。

有没有一种简单的方法可以在web.py中设置基于异步/回调的url下载机制?低资源使用率尤其重要,因为每个用户发起的请求都可能导致下载多个页面。

流程将如下所示:

User request -> web.py ->并行或异步下载10页->分析内容,返回结果

我认识到web.py是一种很好的方法,但是我已经在使用Twisted了,所以我对适合Twisted的东西特别感兴趣。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-04-23 16:24:41

使用异步http客户端,它使用asynchat和asyncore。http://sourceforge.net/projects/asynchttp/files/asynchttp-production/asynchttp.py-1.0/asynchttp.py/download

票数 1
EN

Stack Overflow用户

发布于 2010-12-20 00:31:56

下面是一段有趣的代码。我自己没有用过它,但它看起来很不错;)

https://github.com/facebook/tornado/blob/master/tornado/httpclient.py

低级AsyncHTTPClient:

“使用pycurl支持的非阻塞HTTP客户端。用法示例:”

代码语言:javascript
运行
复制
import ioloop

def handle_request(response):
    if response.error:
        print "Error:", response.error
    else:
        print response.body
    ioloop.IOLoop.instance().stop()

http_client = httpclient.AsyncHTTPClient()
http_client.fetch("http://www.google.com/", handle_request)
ioloop.IOLoop.instance().start()

“fetch()可以接受string URL或HTTPRequest实例,这提供了更多的选项,比如执行POST/PUT/DELETE请求。

AsyncHTTPClient构造函数的关键字参数max_clients决定了可以在每个IOLoop上并行执行的并发fetch()操作的最大数量。“

还有一些新的实现正在进行中:https://github.com/facebook/tornado/blob/master/tornado/simple_httpclient.py“无外部依赖的非阻塞HTTP client……这个类仍在开发中,尚未推荐用于生产。”

票数 5
EN

Stack Overflow用户

发布于 2009-03-21 05:02:48

一种选择是将工作发布到某种类型的队列中(您可以使用带有pyactivemqSTOMP的企业级应用程序作为连接器,也可以使用像Kestrel这样的轻量级应用程序,它是用Scala编写的,使用与memcache相同的协议,因此您可以使用python memcache客户端与之通信)。

一旦设置了排队机制,就可以创建订阅到队列的任意数量的工作任务,并根据需要执行实际的下载工作。你甚至可以让他们住在其他机器上,这样他们根本不会影响你网站的服务速度。当工作程序完成后,它们将结果发送回数据库或另一个队列,在那里When服务器可以提取它们。

如果你不想管理外部的工作进程,那么你可以在运行web服务器的同一个python进程中创建工作线程,但很明显,这会对你的网页服务性能产生更大的影响。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/668257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档