• python concurrent.futures 模块启动并行任务


    concurrent.futures 模块提供了一种高层次的界面,用于异步执行可调用对象(通常是函数)。这个模块在 Python 3.2 及更高版本中可用。主要的类和函数为:

    1. Executor 类:

        Executor 是一个抽象类,定义了异步执行可调用对象的通用接口。具体的实现类包括 ThreadPoolExecutorProcessPoolExecutor

    2. ThreadPoolExecutor 类:

       ThreadPoolExecutor 是一个使用线程池执行任务的实现。它允许将可调用对象提交到线程池中,并在后台异步执行。

    3.ProcessPoolExecutor 类:

      ProcessPoolExecutor 是一个使用进程池执行任务的实现。与 ThreadPoolExecutor 不同,ProcessPoolExecutor 在不同的进程中执行任务,适用于CPU密集型任务。

    4. Future 类:

      Future 表示异步计算的结果。通过 Executor.submit() 方法获得 Future 对象,然后可以在将来的某个时候获取实际的结果。

    5. as_completed 函数:

      as_completed 函数是一个生成器,它迭代一组 Future 对象,返回已完成的 Future。可以用于按照完成顺序获取结果。

    6. wait 函数:

      wait 函数用于等待一组 Future 对象完成。可以指定超时时间,以便在超时后取消未完成的任务。

    1. import concurrent.futures
    2. import urllib.request
    3. URLS = ['http://www.foxnews.com/',
    4. 'http://www.cnn.com/',
    5. 'http://europe.wsj.com/',
    6. 'http://www.bbc.co.uk/',
    7. 'http://some-made-up-domain.com/']
    8. # Retrieve a single page and report the URL and contents
    9. def load_url(url, timeout):
    10. with urllib.request.urlopen(url, timeout=timeout) as conn:
    11. return conn.read()
    12. # We can use a with statement to ensure threads are cleaned up promptly
    13. with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    14. # Start the load operations and mark each future with its URL
    15. ## 返回concurrent.futures.Future对象
    16. #future = executor.submit(load_url, URLS[0], 60)
    17. #print(future)
    18. ## 返回字典,键为future对象,值为网址
    19. future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
    20. #print(future_to_url)
    21. ## as_completed: used to iterate over the Future objects as they are completed.
    22. #for future in concurrent.futures.as_completed(future_to_url.keys()):
    23. for future in concurrent.futures.as_completed(future_to_url):
    24. url = future_to_url[future]
    25. try:
    26. data = future.result()
    27. except Exception as exc:
    28. print('%r generated an exception: %s' % (url, exc))
    29. else:
    30. # %r格式说明符用于字符串格式中,用于使用对象的__repr_方法表示对象的可打印版本。
    31. print('%r page is %d bytes' % (url, len(data)))
    32. ## 超链接形式
    33. #print('%s page is %d bytes' % (url, len(data)))

    参考:

    https://www.bookstack.cn/read/python-3.10.0-zh/89c904110447ef59.md

  • 相关阅读:
    net-java-php-python-毕业生离校管理系统计算机毕业设计程序
    Aeraki Mesh正式成为CNCF沙箱项目,腾讯云携伙伴加速服务网格成熟商用
    Java常用类
    Java 枚举类型与泛型-第13章
    护眼灯A级和AA级有什么区别?2022双十一国AA台灯有必要
    [计算机提升] 数据及相关概念
    做过哪些外设驱动?
    如何自动识别爬虫网页的编码
    限制input框只能输入数字和小数点,并且保留小数点后两位
    3分钟开通GPT-4
  • 原文地址:https://blog.csdn.net/qq_27390023/article/details/134443126