首页 > 其他分享 >线程池concurrent.futures

线程池concurrent.futures

时间:2022-11-13 12:56:53浏览次数:42  
标签:task get futures concurrent html 线程 executor print

from concurrent.futures import ThreadPoolExecutor,as_completed,wait
import time

# 线程池
# 主线程中可以获取某一个线程的状态或某一个任务的状态 以及返回值
# 当一个线程完成的时候我们主线程能立即知道
# futures 可以让多线程和多进程编码接口一致




# 定义一个模拟网络请求
def get_html(times):

    time.sleep(times)
    print("get page {} success".format(times))
    return times


# 定义一个线程池
executor = ThreadPoolExecutor(max_workers=2)
# # 提交任务,把执行的函数提交到线程池中,是立即返回 非阻塞
# task1 = executor.submit(get_html,(3))
# task2 = executor.submit(get_html,(2))
#
# # done方法用于判定某个任务是否完成
# print(task1.done())
# print(task2.cancel())  # 取消某一个任务 返回True 或False,若任务状态在执行中或完成是取消不了的,只要在还没开始执行可以取消
# time.sleep(3)
# print(task1.done())
#
# # result 获取task返回结果 是阻塞的
# print(task1.result())


# -----------------------
# 要获取已经成功的task的返回

# 批量提交任务
urls = [3,2,4]
all_task = [executor.submit(get_html,(url)) for  url in  urls]

# 用于阻塞主线程, 等子线程执行完 在执行主线程,也可以设置条件,等某子线程执行完 返回主线程
wait(all_task)
print("主线程")

# # 示例一
# for future in as_completed(all_task):
#     data = future.result()
#     print("get {} page success".format(data))
#
# 示例2 map 返回顺序和url顺序是一致的
# for data in executor.map(get_html,urls):
#     print("get {} page ".format(data))

 

标签:task,get,futures,concurrent,html,线程,executor,print
From: https://www.cnblogs.com/niunai/p/16885790.html

相关文章

  • 多线程编程学习笔记文章目录
     多线程编程学习笔记-基础(一)多线程编程学习笔记-基础(二)多线程编程学习笔记-基础(三) 多线程编程学习笔记——线程同步(一)多线程编程学习笔记——线程同步(二) 多线......
  • C#多线程之同步基础篇
    目录一、基本概念二、锁构造MonitorMutex死锁三、信号构造SemaphoreManualResetEventAutoResetEventCountdownEvent四、等待句柄等待句柄和线程池WaitHandle一、基本概念......
  • 从头开始进行CUDA编程:线程间协作的常见技术
    在前一篇文章中,我们介绍了如何使用GPU运行的并行算法。这些并行任务是那些完全相互独立的任务,这点与我们一般认识的编程方式有很大的不同,虽然我们可以从并行中受益,但是这......
  • 读者-写者(多线程)
    读者-写者(多线程)描述问题:需满足的条件:1.写进程与写进程之间必须互斥的写入数据(因为如果两个写进程同时对共享数据中的区域A中的数据进行写操作的话,会导致数据错误覆盖......
  • 线程安全和可重入
    1. 结论(牢记):     可重入一定线程安全!!          2. 详解/****************************************************/1.可重入可以......
  • 实现线程安全的方法三
    Lock锁实例化ReentrantlockprivateReentrantlocklock=new Reentrantlock(); publicvoidrun(){whilie(true){try{lock.lock()......
  • Linux系统中线程同步方式中的条件变量操作方法
      大家好,今天主要和大家聊一聊,如何使用Linux中线程同步方式中的条件变量。    第一:条件变量基本简介   条件变量是线程可用的另一种同步机制,条件变量用于自动阻......
  • WPF 后台线程操作界面元素不卡UI界面线程 Dispatcher
    经常要考虑的,后台的耗时操作不要卡死主界面的问题。<StackPanelVerticalAlignment="Center"><Labelx:Name="lblHello">欢迎你光临WPF的世界!</Label><Button......
  • 解决线程安全问题二
    packagedeep;//同步方法classWindow3implementsRunnable{privateintticket=100;publicvoidrun(){while(true){show();......
  • 如何解决多线程安全问题一
    packagedeep;//问题:出现重票和错票(即线程安全问题)//原因:某个线程操作车票的过程中,未完成时其它线程就参与进来,也操作//如何解决:a操作完才允许其它线程加入//在java中通过......