python 多线程有几种实现方法,Python使用多线程

  python 多线程有几种实现方法,Python使用多线程

  多线程(英文:Multi-threading)是指从软件或硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因为有硬件支持,可以同时执行多个线程,从而提高整体处理性能。具有这种能力的系统包括对称多处理器、多核处理器和芯片级多线程或同步多线程处理器。在一个程序中,这些独立运行的程序段称为“线程”,用它们编程的概念称为“多线程”。在硬件的支持下,多线程计算机可以同时执行多个线程(台湾省翻译为“线程”),从而提高整体处理性能。

  Python 多线程之使用方法

  Python为多线程编程提供了以下模块:

  -_螺纹

  -穿线

  -排队

  -多重处理

  让我们逐一介绍:

  1._thread模块提供底层基本函数支持多线程功能,提供简单锁保证同步。推荐使用线程模块。

  2.线程模块封装了_thread,提供了更高级、更强大、更易用的线程管理功能,为线程提供了更完善的支持。在大多数情况下,只有高级模块线程就足够了。

  相关:《Python教程》

  使用 threading 进行多线程操作:

  方法1:创建一个线程。线程实例并调用其start()方法。

  进口时间

  导入线程

  deftask_thread(计数器):

  Print(f 线程名称:{threading.current _ thread()。name}参数:{counter}开始时间:{time.strftime(%Y-%m-%d

  %H:%M:%S)} )

  num=计数器

  whilenum:

  时间.睡眠(3)

  数字-=1

  Print(f 线程名称:{threading.current _ thread()。name}参数:{counter}结束时间:{time.strftime(%Y-%m-%d

  %H:%M:%S)} )

  if__name__==__main__:

  Print(f 主线程开始时间:{ time . strftime( % y-% m-% d % h :% m :% s )} )

  #初始化3个线程,传递不同的参数

  t1=线程。线程(target=task_thread,args=(3,))

  t2=线程。线程(target=task_thread,args=(2,)

  t3=线程。线程(target=task_thread,args=(1,))

  #打开三个线程

  t1.start()

  t2.start()

  t3.start()

  #等待跑步结束。

  t1.join()

  铌

  sp;t2.join()

  t3.join()

  print(f'主线程结束时间:{time.strftime("%Y-%m-%d%H:%M:%S")}')运行结果如下所示:

  

主线程开始时间:2018-07-0623:03:46

  线程名称:Thread-1参数:3开始时间:2018-07-0623:03:46

  线程名称:Thread-2参数:2开始时间:2018-07-0623:03:46

  线程名称:Thread-3参数:1开始时间:2018-07-0623:03:46

  线程名称:Thread-3参数:1结束时间:2018-07-0623:03:49

  线程名称:Thread-2参数:2结束时间:2018-07-0623:03:52

  线程名称:Thread-1参数:3结束时间:2018-07-0623:03:55

  主线程结束时间:2018-07-0623:03:55

方法二:继承 Thread 类,在子类中重写 run() 和 init() 方法。

  

importtime

  importthreading

  classMyThread(threading.Thread):

  def__init__(self,counter):

  super().__init__()

  self.counter=counter

  defrun(self):

  print(

  f'线程名称:{threading.current_thread().name}参数:{self.counter}开始时间:{time.strftime

  ("%Y-%m-%d%H:%M:%S")}'

  )

  counter=self.counter

  whilecounter:

  time.sleep(3)

  counter-=1

  print(

  f'线程名称:{threading.current_thread().name}参数:{self.counter}结束时间:{time.strftime

  ("%Y-%m-%d%H:%M:%S")}'

  )

  if__name__=="__main__":

  print(f'主线程开始时间:{time.strftime("%Y-%m-%d%H:%M:%S")}')

  #初始化3个线程,传递不同的参数

  t1=MyThread(3)

  t2=MyThread(2)

  t3=MyThread(1)

  #开启三个线程

  t1.start()

  t2.start()

  t3.start()

  #等待运行结束

  t1.join()

  t2.join()

  t3.join()

  print(f'主线程结束时间:{time.strftime("%Y-%m-%d%H:%M:%S")}')

运行结果如下,与方法一的运行结果一致。

  

主线程开始时间:2018-07-0623:34:16

  线程名称:Thread-1参数:3开始时间:2018-07-0623:34:16

  线程名称:Thread-2参数:2开始时间:2018-07-0623:34:16

  线程名称:Thread-3参数:1开始时间:2018-07-0623:34:16

  线程名称:Thread-3参数:1结束时间:2018-07-0623:34:19

  线程名称:Thread-2参数:2结束时间:2018-07-0623:34:22

  线程名称:Thread-1参数:3结束时间:2018-07-0623:34:25

  主线程结束时间:2018-07-0623:34:25

如果继承 Thread 类,想调用外部传入函数,代码如下所示:

  

importtime

  importthreading

  deftask_thread(counter):

  print(f'线程名称:{threading.current_thread().name}参数:{counter}开始时间:{time.strftime("%Y-%m-%d

  %H:%M:%S")}')

  num=counter

  whilenum:

  time.sleep(3)

  num-=1

  print(f'线程名称:{threading.current_thread().name}参数:{counter}结束时间:{time.strftime("%Y-%m-%d

  %H:%M:%S")}')

  classMyThread(threading.Thread):

  def__init__(self,target,args):

  super().__init__()

  self.target=target

  self.args=args

  defrun(self):

  self.target(*self.args)

  if__name__=="__main__":

  print(f'主线程开始时间:{time.strftime("%Y-%m-%d%H:%M:%S")}')

  #初始化3个线程,传递不同的参数

  t1=MyThread(target=task_thread,args=(3,))

  t2=MyThread(target=task_thread,args=(2,))

  t3=MyThread(target=task_thread,args=(1,))

  #开启三个线程

  t1.start()

  t2.start()

  t3.start()

  #等待运行结束

  t1.join()

  t2.join()

  t3.join()

  print(f'主线程结束时间:{time.strftime("%Y-%m-%d%H:%M:%S")}')

这样就和方法一是相通的,实例化自定义的线程类,运行结果不变。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: