Board logo

标题: Python3使用多进程 [打印本页]

作者: admin    时间: 2019-9-28 10:10     标题: Python3使用多进程

操作系统的版本信息: [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




欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2