操作系统的版本信息:
[root@centos6 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@centos6 ~]#
[root@centos6 ~]# uname -r
2.6.32-696.el6.x86_64
Python的版本信息:
[root@centos6 ~]# python3 --version
Python 3.6.8
######
例子一:(多进程+函数)
[root@centos6 ~]# cat xx.py
#coding=utf-8
import multiprocessing #导入多进程模块
def func1():
print('Welcome to zhuohua.')
def func2():
print('Welcome to Python.')
if __name__ == '__main__':
#创建子进程1
process_1 = multiprocessing.Process(target=func1,args=())
#创建子进程2
process_2 = multiprocessing.Process(target=func2,args=())
#分别启动各个子进程
process_1.start()
process_2.start()
#等待各个子进程结束
process_1.join()
process_2.join()
脚本运行的效果:
[root@centos6 ~]# python3 xx.py
Welcome to zhuohua.
Welcome to Python.
[root@centos6 ~]#
######
例子二:(多进程+函数)
[root@centos6 ~]# cat xx.py
#coding=utf-8
import multiprocessing
def func1(a):
print(a)
def func2(b,c):
print(b,c)
if __name__ == '__main__':
a = 'Welcome to zhuohua.'
process_1 = multiprocessing.Process(target=func1,args=(a,)) #给函数的一个变量进行赋值
b = 'Welcome to'
c = 'Python.'
process_2 = multiprocessing.Process(target=func2,args=(b,c)) #给函数的两个变量进行赋值
process_1.start()
process_2.start()
process_1.join()
process_2.join()
脚本运行的效果:
[root@centos6 ~]# python3 xx.py
Welcome to zhuohua.
Welcome to Python.
[root@centos6 ~]#
######
例子三:(多进程+调用其他脚本的函数)
脚本"file_1.py"的内容:
[root@centos6 script_1]# cat file_1.py
#coding=utf-8
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func1():
print(f"进程1的开始时间: {date_time_str(datetime.now())} ,休眠(20)秒")
sleep(20)
print(f"进程1的结束时间: {date_time_str(datetime.now())}")
###
脚本"file_2.py"的内容:
[root@centos6 script_1]# cat file_2.py
#coding=utf-8
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func2():
print(f"进程2的开始时间: {date_time_str(datetime.now())} ,休眠(30)秒")
sleep(30)
print(f"进程2的结束时间: {date_time_str(datetime.now())}")
###
脚本"file_3.py"的内容:
[root@centos6 script_2]# cat file_3.py
#coding=utf-8
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func3():
print(f"进程3的开始时间: {date_time_str(datetime.now())} ,休眠(40)秒")
sleep(40)
print(f"进程3的结束时间: {date_time_str(datetime.now())}")
###
脚本"xx.py"的内容:(主进程)
[root@centos6 ~]# cat xx.py
#coding=utf-8
import multiprocessing
#添加路径'/script_1'、'/script_2'为系统的环境变量
import sys
sys.path.append('/script_1') #路径'/script_1'为脚本"file_1.py"、"file_2.py"的所在目录
sys.path.append('/script_2') #路径'/script_2'为脚本"file_3.py"的所在目录
from file_1 import func1 #调用脚本"file_1.py"的函数func1()
from file_2 import func2 #调用脚本"file_2.py"的函数func2()
from file_3 import func3 #调用脚本"file_3.py"的函数func3()
if __name__ == '__main__':
process_1 = multiprocessing.Process(target=func1,args=())
process_2 = multiprocessing.Process(target=func2,args=())
process_3 = multiprocessing.Process(target=func3,args=())
process_1.start()
process_2.start()
process_3.start()
process_1.join()
process_2.join()
process_3.join()
脚本“xx.py”运行的效果:(所有进程的开始时间都基本一致)
[root@centos6 ~]# python3 xx.py
进程1的开始时间: 2019-02-08 12:39:45 ,休眠(20)秒
进程2的开始时间: 2019-02-08 12:39:45 ,休眠(30)秒
进程3的开始时间: 2019-02-08 12:39:45 ,休眠(40)秒
进程1的结束时间: 2019-02-08 12:40:05
进程2的结束时间: 2019-02-08 12:40:15
进程3的结束时间: 2019-02-08 12:40:25
[root@centos6 ~]#
笺注:
一开始时会产生4个进程,主进程会在所有子进程都执行结束后,立即结束:
[root@centos6 ~]# ps -ef |grep "xx.py" |grep -v grep
root 17349 17154 0 12:39 pts/4 00:00:00 python3 xx.py
root 17350 17349 0 12:39 pts/4 00:00:00 python3 xx.py
root 17351 17349 0 12:39 pts/4 00:00:00 python3 xx.py
root 17352 17349 0 12:39 pts/4 00:00:00 python3 xx.py
[root@centos6 ~]#
[root@centos6 ~]# ps -ef |grep "xx.py" |grep -v grep
root 17349 17154 0 12:39 pts/4 00:00:00 python3 xx.py
root 17351 17349 0 12:39 pts/4 00:00:00 python3 xx.py
root 17352 17349 0 12:39 pts/4 00:00:00 python3 xx.py
[root@centos6 ~]#
[root@centos6 ~]# ps -ef |grep "xx.py" |grep -v grep
root 17349 17154 0 12:39 pts/4 00:00:00 python3 xx.py
root 17352 17349 0 12:39 pts/4 00:00:00 python3 xx.py
[root@centos6 ~]#
[root@centos6 ~]# ps -ef |grep "xx.py" |grep -v grep
[root@centos6 ~]#
######
例子四:(多进程+类)
[root@centos6 ~]# cat xx.py
#coding=utf-8
import multiprocessing
class class1():
def func1(self):
print('Welcome to zhuohua.')
def func2(self):
print('Welcome to Python.')
if __name__ == '__main__':
myclass = class1()
process_1 = multiprocessing.Process(target=myclass.func1,args=())
process_2 = multiprocessing.Process(target=myclass.func2,args=())
process_1.start()
process_2.start()
process_1.join()
process_2.join()
脚本运行的效果:
[root@centos6 ~]# python3 xx.py
Welcome to zhuohua.
Welcome to Python.
[root@centos6 ~]#
######
例子五:(多进程+类)
[root@centos6 ~]# cat xx.py
#coding=utf-8
import multiprocessing
class class1():
def func1(self,a):
print(a)
def func2(self,b,c):
print(b,c)
if __name__ == '__main__':
myclass = class1()
a = 'Welcome to zhuohua.'
process_1 = multiprocessing.Process(target=myclass.func1,args=(a,)) #给一个变量进行赋值
b = 'Welcome to'
c = 'Python.'
process_2 = multiprocessing.Process(target=myclass.func2,args=(b,c)) #给两个变量进行赋值
process_1.start()
process_2.start()
process_1.join()
process_2.join()
脚本运行的效果:
[root@centos6 ~]# python3 xx.py
Welcome to Python.
Welcome to zhuohua.
[root@centos6 ~]#
######
例子六:(多进程+调用其他脚本的类)
脚本"file_1.py"的内容:
[root@centos6 script_1]# cat file_1.py
#coding=utf-8
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
class class1():
def func1(self):
print(f"进程1的开始时间: {date_time_str(datetime.now())} ,休眠(20)秒")
sleep(20)
print(f"进程1的结束时间: {date_time_str(datetime.now())}")
###
脚本"file_2.py"的内容:
[root@centos6 script_1]# cat file_2.py
#coding=utf-8
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
class class2():
def func2(self):
print(f"进程2的开始时间: {date_time_str(datetime.now())} ,休眠(30)秒")
sleep(30)
print(f"进程2的结束时间: {date_time_str(datetime.now())}")
###
脚本"file_3.py"的内容:
[root@centos6 script_2]# cat file_3.py
#coding=utf-8
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
class class3():
def func3(self):
print(f"进程3的开始时间: {date_time_str(datetime.now())} ,休眠(40)秒")
sleep(40)
print(f"进程3的结束时间: {date_time_str(datetime.now())}")
###
脚本"xx.py"的内容:(主进程)
[root@centos6 ~]# cat xx.py
#coding=utf-8
import multiprocessing
import sys
sys.path.append('/script_1')
sys.path.append('/script_2')
from file_1 import class1 #调用脚本"file_1.py"的类class1()
from file_2 import class2 #调用脚本"file_2.py"的类class2()
from file_3 import class3 #调用脚本"file_3.py"的类class3()
if __name__ == '__main__':
myclass1 = class1()
process_1 = multiprocessing.Process(target=myclass1.func1,args=())
myclass2 = class2()
process_2 = multiprocessing.Process(target=myclass2.func2,args=())
myclass3 = class3()
process_3 = multiprocessing.Process(target=myclass3.func3,args=())
process_1.start()
process_2.start()
process_3.start()
process_1.join()
process_2.join()
process_3.join()
脚本“xx.py”运行的效果:
[root@centos6 ~]# python3 xx.py
进程2的开始时间: 2019-02-08 13:35:52 ,休眠(30)秒
进程3的开始时间: 2019-02-08 13:35:52 ,休眠(40)秒
进程1的开始时间: 2019-02-08 13:35:52 ,休眠(20)秒
进程1的结束时间: 2019-02-08 13:36:12
进程2的结束时间: 2019-02-08 13:36:22
进程3的结束时间: 2019-02-08 13:36:32
[root@centos6 ~]#
相关文章:
CentOS8使用多进程+Ping |