#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@Time : 2019/11/18 0018 21:55
#@Author : tb_youth
#@FileName: multiprocessingTest.py
#@SoftWare: PyCharm
#@Blog : https://blog.csdn.net/tb_youth
'''
学习如何使用多进程
'''
from multiprocessing import Process
import os
import time
def run_case(text):
print('入参:{0},当前进程号:{1}'.format(text, os.getpid()))
time.sleep(5)
if __name__ == '__main__':
#父进程用于启动子进程
print('当前是父进程,进程号:{0}'.format(os.getpid()))
s1 = time.time()
for i in range(5):
child = Process(target=run_case, args=(str(i),))
print('子进程启动.')
child.start()
# join()进行进程阻塞(阻塞主进程,不加则会主进程结束再调用子进程)
#目的是进程同步
#但是不应该放在这里,应该放在所有start后面去执行
#否则效率可能不如单进程
child.join()
e1 = time.time()
print('time = {0}'.format(e1-s1))
print('进程结束.')
print('+------------------------+')
print('当前是父进程,进程号:{0}'.format(os.getpid()))
s2 = time.time()
lst = []
for i in range(5):
child = Process(target=run_case, args=(i,))
print('子进程启动.')
child.start()
lst.append(child)
# 多进程join()的正确写法
for child in lst:
child.join()
e2 = time.time()
print('time = {0}'.format(e2 - s2))
print('进程结束.')
执行上述代码结果:
当前是父进程,进程号:3732
子进程启动.
入参:0,当前进程号:8156
子进程启动.
入参:1,当前进程号:7636
子进程启动.
入参:2,当前进程号:7632
子进程启动.
入参:3,当前进程号:3004
子进程启动.
入参:4,当前进程号:16632
time = 26.717877864837646
进程结束.
+------------------------+
当前是父进程,进程号:3732
子进程启动.
子进程启动.
子进程启动.
子进程启动.
子进程启动.
入参:3,当前进程号:17916
入参:2,当前进程号:13984
入参:1,当前进程号:17804
入参:0,当前进程号:3088
入参:4,当前进程号:3748
time = 5.643748760223389
进程结束.