关于多进程多线程等说明,网上有很多说明,我之前看了一些也看的云里雾里,不是特别理解这些概念,我以几个最基础的例子来简单说明下多进程的用法,大家根据代码运行结果来寻思多进程的使用,我用的比较多的就是在爬虫使用中…
python3中,多进程的引入需要使用multiprocessing模块,此模块为python3自带。
- 单进程
# coding=utf-8
import time
import multiprocessing
def task(i):
print(f'你好呀~!-->{ i }, '
f'当前进程名称是:{ multiprocessing.current_process().name },'
f'进程ID是{ multiprocessing.current_process().ident }') # 打印当前的进程名字和进程ID
time.sleep(2)
# 单进程执行函数5次,打印程序执行耗时
if __name__ == '__main__':
start = time.time()
for i in range(5):
task(i)
stop = time.time()
print(f"执行耗时:{ stop - start }") # 统计程序执行耗时
程序执行结果为:
你好呀~!–>0, 当前进程名称是:MainProcess,进程ID是1644
你好呀~!–>1, 当前进程名称是:MainProcess,进程ID是1644
你好呀~!–>2, 当前进程名称是:MainProcess,进程ID是1644
你好呀~!–>3, 当前进程名称是:MainProcess,进程ID是1644
你好呀~!–>4, 当前进程名称是:MainProcess,进程ID是1644
执行耗时:10.00407099723816
执行函数5次,每次打印“你好呀~!xxxxxx”之后,程序等待2秒,5次循环,总共耗时10秒多,程序是顺序执行的,使用了一个主进程运行。
等待总是难熬的,我们希望一心多用,比如说:在浏览器访问网页,我们可以同时打开多个网页,而不是如果一个网页访问很慢,我们就只能慢慢的等着它加载完成,我们可以同时开多个网页,看电视、看漫画、看小说、新闻…当电视卡住的时候,我们可以先看会小说等待它完成。下面我们来看下多进程实现。
- 多进程-1
# coding=utf-8
import time
import multiprocessing
def task(i):
print(f'你好呀~!-->{ i }, '
f'当前进程名称是:{ multiprocessing.current_process().name },'
f'进程ID是{ multiprocessing.current_process().ident }') # 打印当前的进程名字和进程ID
time.sleep(2)
# 单进程执行函数5次,打印程序执行耗时
if __name__ == '__main__':
start = time.time()
# 生成5个进程函数
tasks = [multiprocessing.Process(target=task, args=(i,)) for i in range(5)] # target为目标函数,args为参数,是一个元组
for t in tasks:
t.start() # 启动进程函数
for t in tasks:
t.join() # 等待进程执行完成或超时或异常
stop = time.time()
print(f"执行耗时:{ stop - start }") # 统计程序执行耗时
程序执行结果为:
你好呀~!–>1, 当前进程名称是:Process-2,进程ID是5764
你好呀~!–>0, 当前进程名称是:Process-1,进程ID是12136
你好呀~!–>3, 当前进程名称是:Process-4,进程ID是4156
你好呀~!–>2, 当前进程名称是:Process-3,进程ID是4004
你好呀~!–>4, 当前进程名称是:Process-5,进程ID是7748
执行耗时:2.1308791637420654
我们会发现同时启动了5个进程,每个进程的名称和ID各不相同。程序是无序执行的 ,5个进程执行完成耗时2秒多。嘿嘿,是不是心中想着,卧槽,还有这种操作,那我们工作不是可以提升很多倍了呀…
答案是肯定的,那么我们的速度提升极限在哪里呢?这个例子中我们是可以5个进程同时操作,那么这个数值是不是可以无限大呢?
下一篇我回大概讲一下这个的应用场景和极限在哪里…