用asyncore阅读网站

Tom*_*Tom 7 python sockets web-services

我想异步读一个网站,据我所知,urllib是不可能的.现在我尝试用普通套接字阅读,但HTTP给了我地狱.我遇到了所有类似的时髦编码,例如transfer-encoding:chunked,必须手动解析所有这些东西,我觉得编码C,而不是python.

不是像URLLib那样更好的方式,异步吗?我真的不想重新实现整个HTTP规范,而之前已经完成了.

Twisted目前不是一个选项.

问候,

汤姆

bay*_*yer 7

您可以自己实现异步调用.对于每个调用,启动一个新线程(或尝试从池中获取一个)并使用回调来处理它.

你可以很好地与装饰师这样做:

def threaded(callback=lambda *args, **kwargs: None, daemonic=False):
    """Decorate  a function to run in its own thread and report the result
    by calling callback with it."""
    def innerDecorator(func):
        def inner(*args, **kwargs):
            target = lambda: callback(func(*args, **kwargs))
            t = threading.Thread(target=target)
            t.setDaemon(daemonic)
            t.start()
        return inner
    return innerDecorator

@threaded()
def get_webpage(url):
    data = urllib.urlopen(url).read()
    print data
Run Code Online (Sandbox Code Playgroud)

  • 对不起,正如我所说,我想要异步套接字,而不是线程. (2认同)

cod*_*ape 5

你看过http://asynchttp.sourceforge.net/吗?

"用于Python的异步HTTP客户端

'asynchttp''模块是Python库'asynchat'模块的逻辑扩展,它基于'asyncore'和'select'模块构建.我们的目标是提供优秀的'httplib'模块的功能,而不使用阻塞套接字."

该项目的最后一次提交是2001-05-29,所以它看起来已经死了.但无论如何它可能会引起人们的兴趣.

免责声明:我自己没有用过它.

此外,这篇博客文章还提供了有关异步HTTP的一些信息.