如何在python解释器中实现一个多线程操作
我们通过计算某一个函数的运行时间来确定多线程是怎么实现的!
直接上代码:
import threading
import time
def timer(func):
def decoration(*args,**kwargs):
start_time=time.time()
func(*args,**kwargs)
stop_time=time.time()
print(" the func has spent {} seconds".format(stop_time-start_time))
return decoration
@timer#装饰器
def fun(*args,**kwargs):#
print("this is {}".format(args[0]))
time.sleep(2)
if __name__=='__main__':
start_time=time.time()
for i in range(10):
fun1=threading.Thread(target=fun,args=(i,))
fun1.start()
stop_time=time.time()
print("all has spent {} seconds".format(stop_time-start_time))
来看运行结果
分析:
主线程一共用了0.00299秒,而每一个子线程则花费了2.00秒左右的时间。
我们来看看其它参数
import threading
import time
def timer(func):
def decoration(*args,**kwargs):
start_time=time.time()
func(*args,**kwargs)
stop_time=time.time()
print(" the func has spent {} seconds".format(stop_time-start_time))
return decoration
@timer#装饰器
def fun(*args,**kwargs):
#查看此线程是否是主线程
print("this is {}".format(args[0]),threading.current_thread())
time.sleep(2)
if __name__=='__main__':
start_time=time.time()
for i in range(10):
fun1=threading.Thread(target=fun,args=(i,))
fun1.start()
stop_time=time.time()
print("all has spent {} seconds".format(stop_time-start_time))#主线程运行时间
print(threading.current_thread())#查看线程是否是主线程
来看运行结果:
来看一下线程总数量
print("线程总数为:",threading.active_count())#查看线程总数
运行结果正确:包括10个子线程、1个主线程。
用以上的代码则可以实现一个简单多线程并发的效果,但其实每个cpu在同一时刻只能处理一个线程,我们所得到的结果是因为cpu进行了上下文(context)切换,所以有一种错觉为多线程并发,但是实际上并不是多线程并发。python语言是上世纪90年代才发展起来的,那时候它的创造者只考虑到单核并发,并且python是基于很多语言写的,比如cpython是基于C写的,jpython是基于java写的,在多线程上,python是没有C、java夯实的,这也成为了python的一种缺陷。
如果对我的文章感兴趣,请为我点一个赞,如果有python的知识需要了解或探讨,可以加本人微信:cuiliang1666457052