Python的定时器与线程池

系统 1423 0

定时器执行循环任务:

 

  • 知识储备
  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 )确定最忧 的线程数量。

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论