专栏首页大数据入坑指南Python自学成才之路 多进程开发

Python自学成才之路 多进程开发

在python中可以通过os.fork()创建子进程,但是这种方式只能在linux,unix,mac下面使用,不能跨平台,所以一般不推荐使用这种方式。Python提供了一个multiprocessing模块来创建多进程,这种方式写起来更简单,且支持跨平台,一般推荐使用multiprocessing模块来创建多线程。

1.使用Process来创建进程

from multiprocessing import Process
import os


def pringLog(msg):
    print(msg)
    print('子进程id: %s' % os.getpid())
    print('父进程id: %s' % os.getppid())


if __name__ == '__main__':
    p = Process(target=pringLog, args=('hello world',))
    p.start()
    print('父进程id: %s' % os.getpid())
    print("我是主进程代码")

输出:
父进程id: 34076
我是主进程代码
hello world
子进程id: 30084
父进程id: 34076  

注意:如果是在windows系统下,创建进程的代码需要放在__name__ == '_main_'下面,否则会报错。

2.通过继承Process来创建进程

from multiprocessing import Process
import os
import time

class MyProcess(Process):

    def run(self):
        print('子进程id %s' %os.getpid())
        print('父进程id %s' % os.getppid())
        for x in range(5):
            print('子进程 %s' %x)
            time.sleep(1)


if __name__ == '__main__':
    myprocess = MyProcess()
    myprocess.start()

    myprocess.join()
    print('所有进程执行完毕')
输出:
子进程id 23388
父进程id 29012
子进程 0
子进程 1
子进程 2
子进程 3
子进程 4
所有进程执行完毕

3.一个小技能,join函数 Join可以让主进程阻塞,直到子进程执行完毕才会执行主进程后面的代码,通过添加超时参数,还能控制阻塞时长。

from multiprocessing import Process
import time


def countdown():
    for x in range(5):
        print("count:%s" % x)
        time.sleep(1)


if __name__ == '__main__':
    p = Process(target=countdown)
    p.start()

    print('主进程')
    # 一直阻塞,直到子进程执行完毕
    # p.join()
    # 阻塞三秒
    p.join(3)
    print('所有进程执行完毕')
输出:
主进程
count:0
count:1
count:2
所有进程执行完毕
count:3
count:4

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python自学成才之路 进程间通信

    程序在创建子进程时,会完全复制一份主进程的环境,包括变量,函数,类等。所以在子进程中使用的变量,函数,类和主进程之间隔离的,子进程之间也是隔离的。 看下面这个...

    我是李超人
  • Python自学成才之路 with到上下文管理器

    With有这个特效,其实背后实际上是基于__enter__和__exit__这两个魔术方法来实现的。一个对象实现了__enter__和__exit__这两个魔术...

    我是李超人
  • Python自学成才之路 终于弄清楚类方法,静态方法的区别了

    在这个案例中使用@classmethod注解的是类方法,其中cls参数是类本身,@staticmethod注解的是静态方法。

    我是李超人
  • 计算机操作系统——进程和线程

    为什么需要进程 在传统的计算机运行程序时,往往一次只能运行一个程序,这样对于CPU是极度不公平的,有可能一个程序需要进行计算仅仅需要简单的运算,而大部分都会进行...

    陌无崖
  • Python 学习之进程与线程 「 上 」

    进程:对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器(任务)就是启动一个浏览器进程。进程是系统中程序执行和资源分配的基本单位,每个...

    Python技术与生活认知的分享
  • Python学习(十)---- python中的进程与协程

    原文地址: https://blog.csdn.net/fgf00/article/details/52790360 编辑:智能算法,欢迎关注! 上期我们一起学...

    智能算法
  • python并发编程-进程理论-进程方法-守护进程-互斥锁-01

    1.空间上的复用 ​ 多个程序公用一套计算机硬件 2.时间上的复用 ​ 切换+保存状态 ​ 保存状态:保存当前的运行状态,下次接着该状态继续执行 ...

    suwanbin
  • 2.进程 原

    (1)终端用户请求 (2)父进程请求 (3)负荷调节需要(一般在实时操作系统中使用) (4)操作系统的需要

    青木
  • 为什么你的docker容器刚启动就停了

    很多docker初学者,在运行容器的时候,或者是写第一个dockerfile的时候,问题最多的就是容器启动后就停了,怎么看都觉得命令没有问题,容器也没有错误日志...

    李俊鹏
  • 操作系统学习笔记-3:进程

    之前的单道批处理系统,程序是串行执行的,内存中可能只需要记录单一程序的程度段和数据段即可;但是现在使用的是多道批处理系统,多个程序并发执行,内存中就可能存在多个...

    Chor

扫码关注云+社区

领取腾讯云代金券