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 类,在子类中重写 run() 和 init() 方法。线程名称: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
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 类,想调用外部传入函数,代码如下所示:线程名称: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
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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。