返回列表 发帖

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

返回列表