【问题标题】:aiohttp over pycurl multi, since python has the gil, what benefits do i get by switching to aiohttp?aiohttp over pycurl multi,因为python有gil,切换到aiohttp有什么好处?
【发布时间】:2019-06-01 09:13:39
【问题描述】:

在我正在处理的爬虫中。它使用 pycurl multi 发出请求。

如果我切换到aiohttp,我可以期待什么样的效率提升?

怀疑让我怀疑 Python 拥有 GIL 后的潜在改进。大部分时间都花在等待请求(网络 IO)上,所以如果我能以真正的并行方式处理它们,然后在它们进入时处理它们,我可以获得很好的加速。

有没有人经历过这个并且可以提供一些见解?

谢谢

【问题讨论】:

    标签: python curl parallel-processing aiohttp pycurl


    【解决方案1】:

    全局解释器锁是一个互斥锁,用于保护对 Python 的访问 对象,防止多个线程执行 Python 字节码 一次。

    这意味着这会影响您的多线程代码的性能。 AsyncIO 更多的是处理并发请求而不是并行。使用 AsyncIO,即使使用单线程循环,您的代码也将能够处理更多请求,因为网络 IO 将是异步的。这意味着在协程获取网络资源期间,它将“暂停”并且不会锁定它正在运行的线程并允许其他协程执行。 asyncIO 的主要思想是,即使使用单线程,您也可以让 CPU 不断执行计算,而不是等待网络 IO。

    如果你想了解更多关于 asyncIO 的知识,你需要了解并发和并行的区别。这是一个很好的Go talk about this subject,但原理是一样的。

    因此,即使 python 有 GIL,使用 asyncIO 的性能也将远远好于使用传统线程。 Here are some benchmarks:

    【讨论】:

    • 在该基准测试中,tornado 是否配置为使用其tornado.curl_httpclient.CurlAsyncHTTPClient
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    相关资源
    最近更新 更多