zoukankan      html  css  js  c++  java
  • Python的定时器与线程池

    定时器执行循环任务:

    • 知识储备
    1.   Timer(interval, function, args=None, kwargs=None)
    2. interval ===》 时间间隔 单位为s
    3. function ===》 定制执行的函数
    • 使用threading的 Timer 类
    1. start() 为通用的开始执行方法
    2. cancel ()为取消执行的方法
    • 普通单次定时执行
    from threading import Timer
    import time
    # 普通单次定时器
    def handle():
    print("普通单次定时器 函数被执行");
    t1=Timer(interval=1,function=handle);
    t1.start();

    定时循环执行

    from threading import Timer
    import time
    # 循环定时器
    def loop_handle():
    print("循环定时器定时器 函数被执行");
    global t2;
    t2=Timer(interval=1,function=loop_handle);
    t2.start();
    
    t2=Timer(interval=1,function=loop_handle);
    t2.start();
    
    time.sleep(5);# 对主线程停止5s;
    t2.cancel(); # t2 在主main 线程阻塞5s t2执行5s
    

      

    线程池技术

    基本概念

    • 在程序启动时就创建好若干个线程,并保存到内存中 。 当线程启动并执行完成之后,并不做销毁处理,而是等待下次再使用。

        i:节约了创建进程 销毁进程的时间,大大降低进程的开销

    • 实现
    1. 抢占式:线程池中的线程执行顺序不固定。该方式使用 ThreadPoolExecutor的 submit ()方法实现。
      1.       具体执行那个线程是随机的, 并且执行的函数也可以不一致
      2.   那个线程执行的函数出现了崩溃,不影响整个线程池的其他线程的运行
      3.   使用with 语法 进行简化操作
    • 非抢占式:线程将按照调用的顺序执行 。 此方式使用 ThreadPoolExecutor 的 map ()方法来实现
    1.   每个线程处理的函数都是一致的,一个线程执行的函数崩溃,整体就崩溃

    基本code

    from concurrent.futures import ThreadPoolExecutor # 导入线程池
    import time
    
    def printName(name):
    print("名字",name);
    time.sleep(2);
    nameList=['Tom','jirl','steam'];
    # 抢占式线程池
    start2=time.time();
    with ThreadPoolExecutor(3) as executor:
    for i in nameList:# 因为每次执行的函数不一致,所以参数要分开传递
    executor.submit(printName,i); 
    end2=time.time();
    print("2 speed:",str(end2-start2));
    #非抢占式线程池


    线程数量公式:
    公式

    经验
    (1 )初始化一定数量的线程。
    ( 2 )在多次实验中递增或递减线程数量 ,测试运行性能 。
    (3 )确定最忧 的线程数量。

  • 相关阅读:
    The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHa
    eclipse中的快捷键或者自动生成某个方法的操作
    mybatis和jadbc的对比
    1.解决数据库的错误:Can't connect to MySQL server on 'localhost' (10061) (2003);2.无法查看源码的问题;3.无法启动tomcat的问题解决
    2017年杭电计算机研究生复试笔试题目
    jfinal +oracle 排序问题
    oracle 找回被删除的数据
    oracle存储过程
    jfinal调用oracle存储过程
    本地连接oraclel --localhost可以连接ip连接不了解决办法
  • 原文地址:https://www.cnblogs.com/dgwblog/p/11517910.html
Copyright © 2011-2022 走看看