前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python自学成才之路 多进程开发

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

作者头像
我是李超人
发布2020-09-07 17:49:55
2800
发布2020-09-07 17:49:55
举报
文章被收录于专栏:大数据入坑指南

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

1.使用Process来创建进程

代码语言:javascript
复制
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来创建进程

代码语言:javascript
复制
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可以让主进程阻塞,直到子进程执行完毕才会执行主进程后面的代码,通过添加超时参数,还能控制阻塞时长。

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档