python多线程

如何在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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穆穆Max

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值