首页 > 系统服务 > 详细

创建进程的2种方式

时间:2019-05-06 20:18:22      阅读:145      评论:0      收藏:0      [点我收藏+]

两种方式都是利用multiprocessing模块导入Process类来实现具体方法看代码

第一种:

from multiprocessing import Process
import time


# 创建的子程序代码
def task(name):
    print(%s is running % name)
    time.sleep(2)
    print(%s is over % name)

# 注意,在windows系统中,创建进程会将代码以模块的方式从头到尾加载一遍
# 一定要写在if __name__ == ‘__main__‘:代码块里面
# 强调:函数名一旦加括号,执行优先级最高,立刻执行
# 主程序
if __name__ == __main__:
    p1 = Process(target=task, args=(egon, ))
    p1.start()    # 告诉操作系统创建一个进程
    print(主程序打印打印)

第二种:

from multiprocessing import Process
import time

class MyProcess(Process):

    def __init__(self, name):
        super().__init__()
        self.name = name

    # 必须写run方法
    def run(self):
        print(%s is running % self.name)
        time.sleep(1)
        print(%s is end % self.name)

if __name__ == __main__:
    obj = MyProcess(egon)
    obj.start()
    print(主程序)

两种方法其实过程大致相同,实现方式略微有点差别

结果都是:

主进程正在运行
egon is running!
egon is end!

子进程对象.start()方法:向操作系统发出请求:说我要创建个子进程了,快帮我搞一个。

此时start处的代码相当于异步继续向下执行,执行速度肯定会快于操作系统收到请求然后选择性的创建子进程,所以主程序执行完了,子进程的代码才开始执行。

要想让子进程先执行,然后执行下面的主程序的话,可以在子进程下面来个.join(),意思是你子进程先走,我等你搞定了我再进行接下来的主进程代码!

from multiprocessing import Process
import time

def task(name):
    print(%s is running! % name)
    time.sleep(2)
    print(%s is end! %name)

if __name__ == __main__:
    p = Process(target=task, args=(egon, ))
    p.start()
    p.join()
    print(主进程继续运行)

# 结果
egon is running!
egon is end!
主进程正在运行

一次性创建多个子程序:

from multiprocessing import Process
import time

def task(name):
    print(%s正在运行。。。。。 %name)
    time.sleep(2)
    print(%s运行结束。。。。。 %name)


if __name__ == __main__:
    p_list = []
    for i in range(1,4):
        p = Process(target=task, args=(进程[%s] % i, ))
        p.start()
        p_list.append(p)
    for n in p_list:
        n.join()
    print(主进程继续进行!)

 

创建进程的2种方式

原文:https://www.cnblogs.com/suguangti/p/10821697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!