在python中,currency.futures的异步与request-futures的异步有什么区别?

lea*_*ord 1 python concurrency asynchronous concurrent.futures

我使用request-futures异步获取网页。并且我的机器具有多核,所以我也想同时获取许多网站,然后尝试并发使用。futures似乎并发。futures还提供了异步方法,所以有什么区别在并发。未来的异步和请求-未来的异步之间?如果它们相同,意味着我可以弃用请求-未来?

dan*_*ano 5

requests-futures只是顶部的一个小包装concurrent.futures。通过查看源代码可以看到这一点(为简洁起见,删除了文档字符串):

from concurrent.futures import ThreadPoolExecutor
from requests import Session
from requests.adapters import DEFAULT_POOLSIZE, HTTPAdapter

class FuturesSession(Session):

    def __init__(self, executor=None, max_workers=2, *args, **kwargs):
        super(FuturesSession, self).__init__(*args, **kwargs)
        if executor is None:
            executor = ThreadPoolExecutor(max_workers=max_workers)
            # set connection pool size equal to max_workers if needed
            if max_workers > DEFAULT_POOLSIZE:
                adapter_kwargs = dict(pool_connections=max_workers,
                                      pool_maxsize=max_workers)
                self.mount('https://', HTTPAdapter(**adapter_kwargs))
                self.mount('http://', HTTPAdapter(**adapter_kwargs))

        self.executor = executor

    def request(self, *args, **kwargs):
        func = sup = super(FuturesSession, self).request

        background_callback = kwargs.pop('background_callback', None)
        if background_callback:
            def wrap(*args_, **kwargs_):
                resp = sup(*args_, **kwargs_)
                background_callback(self, resp)
                return resp

            func = wrap

        return self.executor.submit(func, *args, **kwargs) # This returns a concurrent.futures.Future
Run Code Online (Sandbox Code Playgroud)

当您使用时requests-futures,您实际上是在使用concurrent.futures.ThreadPoolExecutorconcurrent.futures.Future当您submit执行任务时会返回。如果使用您提供的requests-futures用于处理HTTP请求的API更方便,则可以坚持使用它,甚至可以将它返回的对象与该concurrent.futures模块提供的其他方法一起使用。