zoukankan      html  css  js  c++  java
  • 定时器 线程池进程池

    定时器

    • 可以指定线程多久后启动,(并且他是一个异步的线程,也就是并发)
    from threading import Timer
    """
    这个相当于开启了一个可以定义时间的线程,不需要导入Thread模块了,Timer模块可以直接创建一个线程
    """
    def foo(name):
        print(f"{name}定的时间到了,开启啦")
    
    t = Timer(3,foo,('xc',))
    t.start()
    

    线程池进程池

    • 线程池进程池就是控制线程进程的数据量,并且不会回收,会放在池里面重复使用这几个线程进程.
    • 线程池进程池不同于信号量,这是两个东西,池是控制线程的总数量,以自己控制的数量去操作很多条任务,信号量是控制线程的并发的运行的数量,不会控制线程的总数量

    什么时候使用池

    • 单个任务处理时间短
    • 所要处理的这种任务数量多

    使用池的好处

    • 不用重复的去创建回收线程进程,减少了系统资源的开销以及时间上的开销
    • 如果不使用线程池,就会因为制造了大量线程消耗内存,和线程太多,造成cpu过渡切换
    • 总的来说就是节约系统资源,以及重复造线程进程的开销,信号量是没有这个好处的,他只是让同一段代码,多少个进程可以去操作他.
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    # 导入一个线程池模块和一个进程池模块,这两个模块的使用方法是一样的
    import time
    
    result_lis = []
    def foo(user,pwd):
        time.sleep(0.3)
        print(f"你的账号为{user},你的密码为{pwd}")
        return pwd * 10
    def back_main(x):
        result_lis.append(x.result())
    
    tpool = ThreadPoolExecutor(4)
    for i in range(12):
        res = tpool.submit(foo,'xc',i).add_done_callback(back_main) # 传值不是以元组的形式传值
        # print(res.result())
    tpool.shutdown()
    print("结束")
    print(result_lis)
    
    
  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11552337.html
Copyright © 2011-2022 走看看