zoukankan      html  css  js  c++  java
  • 【10.7】ThreadPoolExecutor线程池

     1 #!/user/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 from concurrent.futures import ThreadPoolExecutor
     5 import time
     6 
     7 # 线程池
     8 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
     9 # 当一个线程完成的时候,我们主线程能立即知道
    10 # futures可以让多线程和多进程编码接口一致
    11 
    12 
    13 def get_html(times):
    14     time.sleep(times)
    15     print('get page {} success'.format(times))
    16     return times
    17 
    18 
    19 executor = ThreadPoolExecutor(max_workers=1)
    20 # 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
    21 # submit(fn, *args, **kwargs)
    22 task1 = executor.submit(get_html, (3))
    23 task2 = executor.submit(get_html, (2))
    24 
    25 # done方法用判断某个任务是否完成
    26 print(task1.done())
    27 # cancel不能取消任务状态为执行中或者执行完成的task
    28 print(task2.cancel())
    29 time.sleep(3)
    30 print(task1.done())
    31 
    32 # result方法可以获取task的执行结果
    33 print(task1.result())
    False
    True
    get page 3 success
    True
    3
    

    as_completed

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 from concurrent.futures import ThreadPoolExecutor, as_completed
     5 import time
     6 from collections.abc import Iterable
     7 
     8 
     9 # 线程池
    10 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
    11 # 当一个线程完成的时候,我们主线程能立即知道
    12 # futures可以让多线程和多进程编码接口一致
    13 
    14 
    15 def get_html(times):
    16     time.sleep(times)
    17     print('get page {} success'.format(times))
    18     return times
    19 
    20 
    21 executor = ThreadPoolExecutor(max_workers=2)
    22 # 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
    23 # submit(fn, *args, **kwargs)
    24 # task1 = executor.submit(get_html, (3))
    25 # task2 = executor.submit(get_html, (2))
    26 
    27 # 获取已经成功的task的返回
    28 # 批量提交,利用列表推导式
    29 urls = [3, 2, 4]
    30 all_task = [executor.submit(get_html, (url)) for url in urls]
    31 
    32 for future in as_completed(all_task):
    33     data = future.result()
    34     print('get {} page'.format(data))
    get page 2 success
    get 2 page
    get page 3 success
    get 3 page
    get page 4 success
    get 4 page
    

    map

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 from concurrent.futures import ThreadPoolExecutor, as_completed
     5 import time
     6 from collections.abc import Iterable
     7 
     8 
     9 # 线程池
    10 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
    11 # 当一个线程完成的时候,我们主线程能立即知道
    12 # futures可以让多线程和多进程编码接口一致
    13 
    14 
    15 def get_html(times):
    16     time.sleep(times)
    17     print('get page {} success'.format(times))
    18     return times
    19 
    20 
    21 executor = ThreadPoolExecutor(max_workers=2)
    22 urls = [3, 2, 4]
    23 
    24 # 通过executor获取已经完成的task,executor.map返回的是future.result()
    25 # map的返回顺序是和urls一样的
    26 for data in executor.map(get_html, urls):
    27     print('get {} page'.format(data))
    get page 2 success
    get page 3 success
    get 3 page
    get 2 page
    get page 4 success
    get 4 page
    

    wait

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 from concurrent.futures import ThreadPoolExecutor, wait
     5 import time
     6 from collections.abc import Iterable
     7 
     8 
     9 # 线程池
    10 # 主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
    11 # 当一个线程完成的时候,我们主线程能立即知道
    12 # futures可以让多线程和多进程编码接口一致
    13 
    14 
    15 def get_html(times):
    16     time.sleep(times)
    17     print('get page {} success'.format(times))
    18     return times
    19 
    20 
    21 executor = ThreadPoolExecutor(max_workers=2)
    22 # 通过submit函数提交执行的函数到线程池中,submit是立即返回,是非阻塞的函数
    23 # submit(fn, *args, **kwargs)
    24 # task1 = executor.submit(get_html, (3))
    25 # task2 = executor.submit(get_html, (2))
    26 
    27 # 获取已经成功的task的返回
    28 # 批量提交,利用列表推导式
    29 urls = [3, 2, 4]
    30 all_task = [executor.submit(get_html, (url)) for url in urls]
    31 
    32 # 等待某一或一组任务的完成,阻塞主线程
    33 wait(all_task)
    34 print('ok')
    get page 2 success
    get page 3 success
    get page 4 success
    ok
    
  • 相关阅读:
    excelhelp
    导入数据到GridView
    sql2005悠改sa
    状态存储管理 encode,decode,transfer
    Session持久化
    Microsoft SQL Server 2005 数据类型
    Cookie (HttpCookie的实例)
    role设计
    ajax
    poj 3370 Halloween treats 夜
  • 原文地址:https://www.cnblogs.com/zydeboke/p/11305094.html
Copyright © 2011-2022 走看看