当前位置: 主页 > Python语言

python 多线程进度条-python线程池

发布时间:2023-02-10 09:28   浏览次数:次   作者:佚名

镇魔司出品,必属精品,欢迎关注。

多线程编程是成为高级程序员的必由之路。 是各大互联网公司面试必问的问题。 今天我们将学习python中的多线程编程。

python 多线程进度条_python线程池_python 全局 线程

想象一下这种情况。 老板给了老王一个任务,就是爬取淘宝上销量比较好的服装品牌的图片。 老王接到任务后,暗暗庆幸。 这并不容易。 一个简单的爬虫就可以了,说干就干,找出之前的爬虫,开始运行,不断的看下载到本地的品牌图片。 老王得意的二郎腿翘起。

美中不足的是速度有点慢,一个下午完成了不到一半的任务python 多线程进度条,老大来了三次提醒。 为什么做图这么慢? 市场部还在等待数据分析。

这让老王很为难。 略一思索,老王心中有了主意。 本爬虫是单线程的,一次只能下载一张图片。 下载完成后,就可以抓取下一张图片了。 如果某张图片下载卡住了,整个程序就必须暂停,等待这张图片下载完成再往下执行。

如果是少量的数据爬取,这个简单的爬虫还好python 多线程进度条,但是一旦数据量变大,时间消耗就非常可观了。 想到这里,老王心中有了答案,多线程!

多线程可以使程序执行“影子克隆技术”。 多个线程同时并行工作。 就算一个线程被堵了,还有其他兄弟帮忙,简直不要太爽。

老王立马着手修改程序,采用多线程同时爬取数据。 这一次,程序的爬取速度大大加快,不到一个小时就完成了任务。 每个人都很开心。

python 全局 线程_python线程池_python 多线程进度条

python线程池_python 多线程进度条_python 全局 线程

下面我们就结合代码来练习一下如何使用多线程编程。

首先导入线程和时间模块。 threading 模块包含用于多线程的相应 API。 时间模块是因为后面我们会打印系统时间,观察程序的运行效果。

import threading
import time

然后我们实例化一个多线程对象

class mThread(threading.Thread):

python线程池_python 全局 线程_python 多线程进度条

接下来我们初始化这个对象的成员。

 def __init__(self,threadID,name,counter,delay):
 threading.Thread.__init__(self)
 self.threadID = threadID
 self.name = name
 self.counter = counter
 self.delay = delay

python 多线程进度条_python线程池_python 全局 线程

您可以看到我们初始化了线程 ID、线程名称、计数器和延迟值。

成员初始化后,我们需要运行多个线程。

定义运行(自我):

print("线程打开"+self.name)

print_time(self.name,self.counter,self.delay)

print("退出线程"+self.name)

在run成员函数中,我们打印了一些调试信息,还有一个打印时间的函数,可以帮助我们了解多线程的运行状态。

python 全局 线程_python 多线程进度条_python线程池

接下来,构造 print_time 函数。 该函数的作用是每隔delay秒打印当前线程名和当前系统时间,总共打印counter次数。 这些参数在创建线程时传递给 print_time。

#定义线程函数

def print_time(线程名称,计数器,延迟):

同时(计数器> = 0):

计数器 = 计数器 - 1

时间。 睡眠(延迟)

print("%s: %s"%(threadName,time.ctime(time.time())))

到这里函数定义就全部完成了,接下来创建线程

python 多线程进度条_python线程池_python 全局 线程

thread1 = myThread(1,"thread1",10,2)

thread2 = myThread(2,"thread2",6,1)

线程1。 开始()

线程2。 开始()

线程1。 加入()

线程2。 加入()

运行并观察结果

python线程池_python 全局 线程_python 多线程进度条

可以看到两个线程同时运行,交替打印信息。

欢迎私信求码,别忘了关注真木斯。