python 多线程进度条-python线程池
镇魔司出品,必属精品,欢迎关注。
多线程编程是成为高级程序员的必由之路。 是各大互联网公司面试必问的问题。 今天我们将学习python中的多线程编程。
想象一下这种情况。 老板给了老王一个任务,就是爬取淘宝上销量比较好的服装品牌的图片。 老王接到任务后,暗暗庆幸。 这并不容易。 一个简单的爬虫就可以了,说干就干,找出之前的爬虫,开始运行,不断的看下载到本地的品牌图片。 老王得意的二郎腿翘起。
美中不足的是速度有点慢,一个下午完成了不到一半的任务python 多线程进度条,老大来了三次提醒。 为什么做图这么慢? 市场部还在等待数据分析。
这让老王很为难。 略一思索,老王心中有了主意。 本爬虫是单线程的,一次只能下载一张图片。 下载完成后,就可以抓取下一张图片了。 如果某张图片下载卡住了,整个程序就必须暂停,等待这张图片下载完成再往下执行。
如果是少量的数据爬取,这个简单的爬虫还好python 多线程进度条,但是一旦数据量变大,时间消耗就非常可观了。 想到这里,老王心中有了答案,多线程!
多线程可以使程序执行“影子克隆技术”。 多个线程同时并行工作。 就算一个线程被堵了,还有其他兄弟帮忙,简直不要太爽。
老王立马着手修改程序,采用多线程同时爬取数据。 这一次,程序的爬取速度大大加快,不到一个小时就完成了任务。 每个人都很开心。
下面我们就结合代码来练习一下如何使用多线程编程。
首先导入线程和时间模块。 threading 模块包含用于多线程的相应 API。 时间模块是因为后面我们会打印系统时间,观察程序的运行效果。
import threading import time
然后我们实例化一个多线程对象
class mThread(threading.Thread):
接下来我们初始化这个对象的成员。
def __init__(self,threadID,name,counter,delay): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter self.delay = delay
您可以看到我们初始化了线程 ID、线程名称、计数器和延迟值。
成员初始化后,我们需要运行多个线程。
定义运行(自我):
print("线程打开"+self.name)
print_time(self.name,self.counter,self.delay)
print("退出线程"+self.name)
在run成员函数中,我们打印了一些调试信息,还有一个打印时间的函数,可以帮助我们了解多线程的运行状态。
接下来,构造 print_time 函数。 该函数的作用是每隔delay秒打印当前线程名和当前系统时间,总共打印counter次数。 这些参数在创建线程时传递给 print_time。
#定义线程函数
def print_time(线程名称,计数器,延迟):
同时(计数器> = 0):
计数器 = 计数器 - 1
时间。 睡眠(延迟)
print("%s: %s"%(threadName,time.ctime(time.time())))
到这里函数定义就全部完成了,接下来创建线程
thread1 = myThread(1,"thread1",10,2)
thread2 = myThread(2,"thread2",6,1)
线程1。 开始()
线程2。 开始()
线程1。 加入()
线程2。 加入()
运行并观察结果
可以看到两个线程同时运行,交替打印信息。
欢迎私信求码,别忘了关注真木斯。