美文网首页
Python第25课:多线程

Python第25课:多线程

作者: 启蒙时代 | 来源:发表于2019-02-21 23:09 被阅读0次

Python第25课:多线程

时间 2019-02-22 下午3:30

主讲 刘培富

地点 四楼电教室


在没有用的多线程之前,我们实际上是单线程在执行程序。所有代码,一行一行执行,前面的没执行完,后面的就要排队等待。

如果任务比较多,每个任务又分别要耗费不少时间,这时,如果仍然使用单线程,效率就会很低。对于这种情况,我们就需要使用多线程,最大限度地应用CPU和内存资源,使程序的执行效率最大化。

举例,有以下程序,先用单线程运行,用时35秒。代码和效果如下:

import time,datetime

starttime = datetime.datetime.now()

for iin range(1,11):

print("●第一个任务之%d,时间是%s"%(i,datetime.datetime.now()))

time.sleep(2)

print("第一个任务执行完毕")

for iin range(1,6):

print("★第二个任务之%d,时间是%s"%(i,datetime.datetime.now()))

time.sleep(3)

print("第二个任务执行完毕")

endtime = datetime.datetime.now()

print("执行本程序,用时"+str(int((endtime - starttime).total_seconds()))+"秒")

单线程运行35秒,现在进行代码改造,改成多线程:

import time,datetime,threading

starttime = datetime.datetime.now()

def diyi(x):

for iin range(1,11):

print("●第一个任务之%d,时间是%s,收到参数%s"%(i,datetime.datetime.now(),x))

time.sleep(2)

print("第一个任务执行完毕")

def dier(x):

for iin range(1,6):

print("★第二个任务之%d,时间是%s,收到参数%s"%(i,datetime.datetime.now(),x))

time.sleep(3)

print("第二个任务执行完毕")

threads=[]

threads.append(threading.Thread(target=diyi,args=("1")))#子线程1

threads.append(threading.Thread(target=dier,args=("2")))#子线程2

for tin threads:

t.setDaemon(True)

t.start()

for iin threads:

i.join()

endtime = datetime.datetime.now()

print("执行本程序,用时"+str(int((endtime - starttime).total_seconds()))+"秒")

可见,改造后,同样的程序,仅使用20秒,执行效率提升15秒。

说明:

1,多线程需要使用模块 threading

2,threading.Thread(target=diyi,args=("1"))用于线程调用函数和传递参数,可见,自定义的线程,表现为一个自定义函数,或者说,打包(封装)在这个自定义函数中。

3,每个自定义的线程,都是子线程。原有主程序为主线程。如例所示,自定义2个子线程,加上主线程,共3个线程。

4,关于线程守护:正常情况,即t.setDaemon(True),子线程运行的同时,主线程将继续,且主线程结束后,无论子线程是否结束,强制子线程结束。如果设置setDaemon(False),则主线程结束后,对应的子线程将继续,直至自行结束。

5,关于线程阻塞:为了防止主线程跳过子线程继续执行,往往需要使用t.join()阻塞主线程。而如上例所使用for i in threads i.join(),可以完美地阻塞主线程,直至所有子线程结束。

相关文章

  • GIL

    谈谈python的GIL、多线程、多进程 最近在看 Python 的多线程,经常我们会听到老手说:“python下...

  • Python多线程编程——多线程编程中的加锁机制

    如果大家对Python中的多线程编程不是很了解,推荐大家阅读之前的两篇文章:Python多线程编程——多线程基础介...

  • 5-线程(补充)

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python_提高

    GIL全局解释器锁 描述Python GIL的概念, 以及它对python多线程的影响?编写⼀个 多线程抓取⽹⻚的...

  • Python程序员都知道的入门知识の八

    目录【Python程序员都知道的入门知识】 1. 多线程threading、Queue Python的多线程由th...

  • Python多线程实现生产者消费者

    1. Python多线程介绍 Python提供了两个有关多线程的标准库,thread和threading。thre...

  • 多线程

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python多线程(上)

    前言 说起Python的多线程,很多人都嗤之以鼻,说Python的多线程是假的多线程,没有用,或者说不好用,那本次...

  • Python 3中的多线程

    Python 3的多线程 Python 3的多线程模块threading在旧版_thread模块基础上进行了更高层...

  • Python 多线程抓取图片效率实验

    Python 多线程抓取图片效率实验 实验目的: 是学习python 多线程的工作原理,及通过抓取400张图片这种...

网友评论

      本文标题:Python第25课:多线程

      本文链接:https://www.haomeiwen.com/subject/xqqgjqtx.html