Python多进程 - 实现多进程的几种方式

Bill78 等级 841 0 0
标签: 多进程Python

方式一: os.fork()

# -*- coding:utf-8 -*-

"""
pid=os.fork()
    1.只用在Unix系统中有效,Windows系统中无效
    2.fork函数调用一次,返回两次:在父进程中返回值为子进程id,在子进程中返回值为0
"""

import os

pid=os.fork()

if pid==0:
    print("执行子进程,子进程pid={pid},父进程ppid={ppid}".format(pid=os.getpid(),ppid=os.getppid()))
else:
    print("执行父进程,子进程pid={pid},父进程ppid={ppid}".format(pid=pid,ppid=os.getpid()))

方式二: 使用multiprocessing模块: 创建Process的实例,传入任务执行函数作为参数

# -*- coding:utf-8 -*-

"""
Process常用属性与方法:
    name:进程名
    pid:进程id
    run(),自定义子类时覆写
    start(),开启进程
    join(timeout=None),阻塞进程
    terminate(),终止进程
    is_alive(),判断进程是否存活
"""

import os,time
from multiprocessing import Process

def worker():
    print("子进程执行中>>> pid={0},ppid={1}".format(os.getpid(),os.getppid()))
    time.sleep(2)
    print("子进程终止>>> pid={0}".format(os.getpid()))

def main():
    print("主进程执行中>>> pid={0}".format(os.getpid()))

    ps=[]
    # 创建子进程实例
    for i in range(2):
        p=Process(target=worker,name="worker"+str(i),args=())
        ps.append(p)

    # 开启进程
    for i in range(2):
        ps[i].start()

    # 阻塞进程
    for i in range(2):
        ps[i].join()

    print("主进程终止")

if __name__ == '__main__':
    main() 

方式二: 使用multiprocessing模块: 派生Process的子类,重写run方法

# -*- coding:utf-8 -*-

import os,time
from multiprocessing import Process

class MyProcess(Process):
    def __init__(self):
        Process.__init__(self)

    def run(self):
        print("子进程开始>>> pid={0},ppid={1}".format(os.getpid(),os.getppid()))
        time.sleep(2)
        print("子进程终止>>> pid={}".format(os.getpid()))

def main():
    print("主进程开始>>> pid={}".format(os.getpid()))
    myp=MyProcess()
    myp.start()
    # myp.join()
    print("主进程终止")

if __name__ == '__main__':
    main()

方式四: 使用进程池Pool

# -*- coding:utf-8 -*-

import os,time
from multiprocessing import Pool

def worker(arg):
    print("子进程开始执行>>> pid={},ppid={},编号{}".format(os.getpid(),os.getppid(),arg))
    time.sleep(0.5)
    print("子进程终止>>> pid={},ppid={},编号{}".format(os.getpid(),os.getppid(),arg))

def main():
    print("主进程开始执行>>> pid={}".format(os.getpid()))
    ps=Pool(5)
    for i in range(10):
        # ps.apply(worker,args=(i,))          # 同步执行
        ps.apply_async(worker,args=(i,))  # 异步执行

    # 关闭进程池,停止接受其它进程
    ps.close()
    # 阻塞进程
    ps.join()
    print("主进程终止")

if __name__ == '__main__':
    main()

本文转自 https://blog.csdn.net/topleeyap/article/details/78981848,如有侵权,请联系删除。

收藏
评论区

相关推荐

python多线程原理和详解(一)
python多线程原理和详解 线程概念 1 . 线程是什么? 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
python多线程详解
python中的多线程是一个非常重要的知识点,今天为大家对多线程进行详细的说明,代码中的注释有多线程的知识点还有测试用的实例。 码字不易,阅读或复制完了,点个赞! import threading from threading import Lock,Thread import time,os '''
Python多进程 - 实现多进程的几种方式
方式一: os.fork() coding:utf8 """ pidos.fork() 1.只用在Unix系统中有效,Windows系统中无效 2.fork函数调用一次,返回两次:在父进程中返回值为子进程id,在子进程中返回值为0 """ import os pidos.fork() if pid0:
我的python多线程和多进程
线程存在空闲 from multiprocessing.dummy import Poolfrom multiprocessing.dummy import Pool as ThreadPool pool ThreadPool(20) pool.map(job_worker, result_cursor)
Python 爬取留言板留言(三):多进程版+selenium模拟
一、项目概述本项目主要是对领导留言板内的所有留言的具体内容进行抓取,对留言详情、回复详情和评价详情进行提取保存,并用于之后的数据分析和进一步处理,可以对政府的决策和电子政务的实施提供依据。具体项目说明和环境配置可参考本系列的第一篇。本篇在第二篇的基础上做了一个主要改进:从多线程改变为多进程,设定同时运行的进程的数量为3,数量适中,这样在保证在同一
一篇文章带你了解Python的分布式进程接口
一、前言    在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。可以写一个服务进程作为调度者,将任务分
京东面试真题解析,手撕面试官
第1章快速入门1.1 Kafka简介1.2 以Kafka为中心的解决方案1.3 Kafka核心概念1.4 Kafka源码环境 第2章生产者2.1 KafkaProducer 使用示例2.2 KafkaProducer 分析 ProducerInterceptors&cProducerInterceptor Kafka 集群元数据 Serializ
Linux 下的 Python 多版本管理(pyenv)
#简介 提到 Python 环境管理,更多人可能会首先想到 virtualenv。但与用于创建独立包环境的 virtualenv 不同,pyenv 的作用仅限于维护不同版本的 Python。它的使用不依赖于 Python,是一个简单、独立的纯 shell 脚本工具。pyenv 也以 [pyenv-virtualenv](https://www.oschin
Mac安装多个Python版本
简介 == 利用Mac包管理工具brew安装pyenv,pyenv用来管理所有python版本。如果没有安装brew,先安装一下吧。 安装pyevn ======= $ brew install pyenv $ pyenv -v pyenv 1.2.6 查看所有的python版本(pyenv管理的所有版本) ====
Python 的多线程是鸡肋?
![](https://oscimg.oschina.net/oscnet/80aea83e4650dc413722553728417eae7de.jpg) “唉,还没毕业就受到甲方的支配,等以后进了公司可咋整啊。”小白嘴里这么吐槽,但心理上还是不敢怠慢,只能恋恋不舍地关掉眼前的游戏,打开了 Python 代码思考了起来。 “现在的程序是单线程的,那就用
Python 进阶(二):多进程
![](https://oscimg.oschina.net/oscnet/179a75d4accda07918762a7f018d37a8442.gif) **更多内容,请点击上方蓝字关注查看!** 1\. 简介 ====== **进程**:通常一个运行着的应用程序就是一个进程,比如:我启动了一个音乐播放器,现在它就是一个进程。**线程**:线程是进
Python多环境管理——pyenv
1 背景&概述 ======= 因某些需求,需要安装`TensorFlow`,很自然地在终端敲下了以下命令: pip install tensorflow 然后。。。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210204170856776.png) 好家伙??? 居然没有?? 因为
Python实现多进程
Python可以实现多线程,但是因为Global Interpreter Lock (GIL),Python的多线程只能使用一个CPU内核,即一个时间只有一个线程在运行,多线程只是不同线程之间的切换,对多核CPU来说,就是巨大的浪费。如4核CPU,实际上只利用了一个核,CPU利用率只有25%。要充分利用多核CPU,可以实现Python的多进程。 首先,im
Python并发编程之多进程,多线程
基础概念 ==== 一、进程、程序和线程 ---------- * 程序:程序只是一堆代码而已 * 进程:指的是程序的运行过程,是对正在运行程序的一个抽象。进程是一个资源单位 * 线程:每个进程有一个地址空间,而且默认就有一个控制线程。线程才是cpu上的执行单位 二、并发与并行 ------- 无论是并行还是并发,在用户看来都是'同时'运
Python的多任务编程
前言Python程序代码都是按自上而下的顺序加载并执行的,但实际需要代码处理的任务并不都是需要按部就班的顺序执行,通常为提高代码执行的效率,需要多个代码执行任务同时执行,也就是多任务编程的需求。基本的计算机模型是由CPU、RAM及各种资源(键盘、硬盘、显卡、网卡等)组成,代码的执行过程,实际就是CPU和相关寄存器及RAM之间的相关处理的过程。在单核CPU场景