Python3多进程-01

关于多进程多线程等说明,网上有很多说明,我之前看了一些也看的云里雾里,不是特别理解这些概念,我以几个最基础的例子来简单说明下多进程的用法,大家根据代码运行结果来寻思多进程的使用,我用的比较多的就是在爬虫使用中…

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个进程同时操作,那么这个数值是不是可以无限大呢?

下一篇我回大概讲一下这个的应用场景和极限在哪里…

你可能感兴趣的:(Python3)