创建进程的2种方式

2019-05-08 07:30:15来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

两种方式都是利用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('主进程继续进行!')

 


原文链接:https://www.cnblogs.com/suguangti/p/10821697.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:day16 (模块)

下一篇:Python爬虫入门教程: All IT eBooks多线程爬取