龙空技术网

python爬虫:单线程多线程最全总结,让多个文件同时执行,效率高

PHM小知 312

前言:

目前同学们对“python单线程限制”大体比较注意,姐妹们都需要剖析一些“python单线程限制”的相关文章。那么小编在网摘上网罗了一些有关“python单线程限制””的相关内容,希望兄弟们能喜欢,朋友们快快来学习一下吧!

为什么要使用多线程来执行程序呢?因为单线程在同一个时刻只能执行一个任务,然而多线程在同一个时刻可以执行很多个任务,很明显提高了程序运行的效率。效率高了,执行的任务的速度也就快了,这样就不会说一直卡着不动。

举个栗子:有两件事,在程序中一是听音乐,二是看电影

单线程:只能听完先听完音乐,才能去看电影,不能同时进行处理,这两件事是独立的。

多线程:可以同时听音乐和看电影,相互联系的。

单线程举例:

from time import ctime, sleep import os def music(mu): for i in range(2): print('第',i+1,'次循环播放',mu,'\t当地时间:',ctime()) sleep(3) def move(mo): for i in range(3): print('第', i + 1, '次循环播放',mo, '\t当地时间:', ctime()) sleep(2) if __name__ == '__main__': music('郑源—宽容') move('美国队长2') print('全部结束--',ctime())

运行结果如下:

第 1 次循环播放 郑源—宽容 	当地时间: Thu Oct 11 23:22:39 2018第 2 次循环播放 郑源—宽容 	当地时间: Thu Oct 11 23:22:42 2018第 1 次循环播放 美国队长2 	当地时间: Thu Oct 11 23:22:45 2018第 2 次循环播放 美国队长2 	当地时间: Thu Oct 11 23:22:47 2018第 3 次循环播放 美国队长2 	当地时间: Thu Oct 11 23:22:49 2018全部结束-- Thu Oct 11 23:22:51 2018 

从运行的时间就知道,每一次播放的时间都是不一样的,说明程序不能同时处理,时间的间隔就是sleep()的休眠时间,这样的程序运行就会慢很多。

多线程举例:

python提供的线程有thread和threading两种,但thread有缺陷,所有选择threading模块

# 导入线程模块 import threading from time import ctime,sleep def music(mu): for i in range(2): # print('第',i+1,'次循环播放',mu,'当地时间:',ctime()) print('第',i+1,'次循环播放',mu,ctime(),'\t') sleep(2) def move(mo): for i in range(2): # print('第', i + 1, '次循环播放', mo, '当地时间:', ctime()) # print('') print('第',i+1,'次循环播放',mo, ctime(),'\t') sleep(2)  threads = [] # 开启一个单线程th1 th1 = threading.Thread(target=music,args=('郑源—宽容',)) # 将单线程th1添加到threads列表中 threads.append(th1) # 开启一个单线程th2 th2 = threading.Thread(target=move,args=('美国队长2',)) # 将单线程th2添加到threads列表中 threads.append(th2)  if __name__ == '__main__': # threads列表中有两个单线程,现在就组合成一个多线程了 for th in threads: # 这个是守护线程,是为了防止程序被无故挂起 th.setDaemon(True) # 开启多进程 th.start() # 在所有子线程完成运行之前,这个子线程的父线程将一直被阻塞,全部结束后才一起输出 th.join() print('全部子进程结束后的时间:',ctime())

运行结果:

第 1 次循环播放 郑源—宽容 Thu Oct 11 23:44:41 2018 	第 1 次循环播放 美国队长2 Thu Oct 11 23:44:41 2018 	第 2 次循环播放 郑源—宽容 Thu Oct 11 23:44:43 2018 	第 2 次循环播放 美国队长2 Thu Oct 11 23:44:43 2018 	全部子进程结束后的时间: Thu Oct 11 23:44:45 2018
从结果就可以知道,第一次播放音乐和电影是同步的,都是Thu Oct 11 23:44:41 2018,第二次播放音乐和电影也是同步的,都是Thu Oct 11 23:44:43 2018 。从时间上可以知道整个运行过程只用了4秒,而上面的单线程运行了10秒,很明显多进程可以提高程序运行的速度,这也是为什么要学多进程的原因。

标签: #python单线程限制 #python 多线程处理一个文件 #python多线程处理多个文件 #python 多线程写同一个文件