• 定时器 线程池进程池


    定时器

    • 可以指定线程多久后启动,(并且他是一个异步的线程,也就是并发)
    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)
    
    
  • 相关阅读:
    自定义事件 Event 、CustomEvent的使用
    移动端适配方案总结
    @media screen媒体查询实现页面自适应布局
    判断页面所有图片加载完成后执行操作
    JQ选择器篇2
    JQ 选择器篇1
    sql 日期转换字符大法
    SQL server从入门精通----3种分页
    SQL server从入门精通----触发器
    SQL server从入门精通---- 事务
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11552337.html
Copyright © 2020-2023  润新知