python中的多进程的创建与启动方式

目录
  • 一、多进程的创建:多进程的创建方法有两种:
    • 1、通过Process创建多进程 Process语法结构:
    • 2、通过进程池创建并启动多进程
    • 3、通过继承的方法创建多进程
    • 4、进程创建与启动完整代码

python中的并发有三种形式,多进程、多线程、协程。执⾏并发任务的⽬的是为了提⾼程序运⾏的效率。

一、多进程的创建:多进程的创建方法有两种:

1、通过Process创建多进程 Process语法结构:

			Process(group, target, name, args, kwargs)
			group:指定进程组,⼤多数情况下⽤不到
			target:表示调用对象,即子进程要执行的任务
			name:子进程的名称,可以不设定
			args:给target指定的函数传递的参数,以元组的⽅式传递
			kwargs:给target指定的函数传递命名参数

Process常用方法:

			p.start() 启动进程,并调用该子进程中的p.run()方法
			p.join(timeout):主进程等待⼦进程执⾏结束再结束,timeout是可选的超时时间
			is_alive():判断进程⼦进程是否还存活
			p.run() 进程启动时运行的方法,正是它去调用target指定的函数
			p.terminate() ⽴即终⽌⼦进程

(1)首先,定义一个待调用的函数:

import os
from multiprocessing import Process
def add(name,num):
    nums = 0
    for i in range(num+1):
        nums = nums+i
    print("用户%s:\n  相加结果为:%s \n  当前进程id为:%s \n  当前子进程的父进程id: %s"%(name,nums,os.getpid(),os.getppid()))

(2)创建并启动一个进程

def test1():
    '''启动一个进程调用'''
    name= '王五'
    p = Process(target=add,args=(name,10,))
    p.start()
    p.join()

其中,p.join()方法可以让主进程等待子进程结束之后再结束,如果不加这个方法,主进程结束,子进程还没有结束。
(2)创建并启动多个进程

def test3():
    names = ['王五','赵六','王麻子']
    process_list=[]
    for name in names:
        p = Process(target=add,args=(name,10,))
        p.start()
        process_list.append(p)
    for j in process_list:
        j.join()

2、通过进程池创建并启动多进程

进程池可以提供指定数量的进程给用户使用,即当有新的请求提交到进程池中时,如果池未满,则会创建一个新的进程用来执行该请求;反之,如果池中的进程数已经达到规定最大值,那么该请求就会等待,只要池中有进程空闲下来,该请求就能得到执行。
Pool(numprocess, initializer, initargs)
numprocess 是要创建的进程数。如果省略此参数,默认为cpu的最大核心数。
Initializer是每个工作进程启动时要执行的可调用对象。
Initargs 传递给 initializer 的参数元祖,默认为 None

def test4():
    from multiprocessing import Pool
    '''启动多个进程2:进程池'''
    p = Pool(5)
    names = ['王五','赵六','王麻子']
    for name in names:
        p.apply_async(add,args=(name,10))
    p.close()
    p.join()

3、通过继承的方法创建多进程

(1)首先创建一个进程

class SubProcess(Process):
    def __init__(self,name,number):
        super(SubProcess, self).__init__()
        self.name = name
        self.number = number
    def run(self):
        sums = 0
        for i in range(self.number):
            sums = sums+i
        print("用户%s:\n  相加结果为:%s \n  当前进程id为:%s \n  当前子进程的父进程id: %s"\
              %(self.name,self.number,os.getpid(),os.getppid()))

(2)启动一个进程

def call_Sub0():
    '''启动一个进程调用'''
    name = '张三'
    p = SubProcess(name,10)
    p.start()
    p.join()

(3)通过列表启动多个进程

def call_Sub1():
    '''启动多个进程1'''
    names = ['王五','赵六','王麻子']
    process_list=[]
    for name in names:
        p = SubProcess(name,10)
        p.start()
        process_list.append(p)
    for j in process_list:
        j.join()
 if __name__ == '__main__':
    print("当前主进程id:",os.getpid())
    call_Sub1()
    print("计算结束!")

4、进程创建与启动完整代码

import os
from multiprocessing import Process
def add(name,num):
    nums = 0
    for i in range(num+1):
        nums = nums+i
    print("用户%s:\n  相加结果为:%s \n  当前进程id为:%s \n  当前子进程的父进程id: %s"%(name,nums,os.getpid(),os.getppid()))
def test1():
    '''启动一个进程调用'''
    name= '王五'
    p = Process(target=add,args=(name,10,))
    p.start()
    p.join()
def test3():
    '''启动多个进程2'''
    names = ['王五','赵六','王麻子']
    process_list=[]
    for name in names:
        p = Process(target=add,args=(name,10,))
        p.start()
        process_list.append(p)
    for j in process_list:
        j.join()
'''
进程池:可以提供指定数量的进程给用户使用,即当有新的请求提交到进程池中时,
如果池未满,则会创建一个新的进程用来执行该请求;反之,如果池中的进程数已经达到规定最大值,
那么该请求就会等待,只要池中有进程空闲下来,该请求就能得到执行。
'''
def test4():
    from multiprocessing import Pool
    '''启动多个进程2:进程池'''
    p = Pool(5)
    names = ['王五','赵六','王麻子']
    for name in names:
        p.apply_async(add,args=(name,10))
    p.close()
    p.join()

class SubProcess(Process):
    def __init__(self,name,number):
        super(SubProcess, self).__init__()
        self.name = name
        self.number = number
    def run(self):
        sums = 0
        for i in range(self.number):
            sums = sums+i
        print("用户%s:\n  相加结果为:%s \n  当前进程id为:%s \n  当前子进程的父进程id: %s"\
              %(self.name,self.number,os.getpid(),os.getppid()))
def call_Sub0():
    '''启动一个进程调用'''
    name = '张三'
    p = SubProcess(name,10)
    p.start()
    p.join()
def call_Sub1():
    '''启动多个进程1'''
    names = ['王五','赵六','王麻子']
    process_list=[]
    for name in names:
        p = SubProcess(name,10)
        p.start()
        process_list.append(p)
    for j in process_list:
        j.join()

if __name__ == '__main__':
    print("当前主进程id:",os.getpid())
    call_Sub1()
    print("计算结束!")

到此这篇关于python中的多进程的创建与启动的文章就介绍到这了,更多相关python多进程创建与启动内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 深入解析Python中的多进程

    目录 前言 1.创建进程 2.多进程中的Queue 3.多进程与多线程的性能比较 4.进程池pool 5.共享内存 6.进程锁lock 前言 现在我们的计算机都是多个核的,通俗来说就是多个处理或者计算单元.为了加快运算和处理速度,我们可以将不同的任务交给多个核心进行同时处理,从而提高了运算速度和效率,多个核心同时运作就是多个进程同时进行,这就是多进程. 1.创建进程 创建进程和创建线程的方法基本一致,请看下面代码: # coding:utf-8 # 导入多进程的包,并重命名为mp import

  • python多进程登录远端服务器

    目录 通过Semaphore 来控制对共享资源的的访问数量,可以控制同一时刻并发的进程数 . #/usr/bin/python # _*_ coding: utf-8 _*_ import multiprocessing import time import paramiko def ssh(s,i,host): try: s.acquire() print(time.strftime('%H:%M:%S'),multiprocessing.current_process().name + "

  • 一篇文章带你搞定Python多进程

    目录 1.Python多进程模块 2.Python多进程实现方法一 3.Python多进程实现方法二 4.Python多线程的通信 5.进程池 1.Python多进程模块 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Process对象来创建一个进程对象.这个进程对象的方法和线程对象的方法差不多也有start(), run(), join()等方法,其中有一个方法不同Thread线

  • python 多线程与多进程效率测试

    目录 1.概述 2.代码练习 3.运行结果 1.概述 在Python中,计算密集型任务适用于多进程,IO密集型任务适用于多线程 正常来讲,多线程要比多进程效率更高,因为进程间的切换需要的资源和开销更大,而线程相对更小,但是我们使用的Python大多数的解释器是Cpython,众所周知Cpython有个GIL锁,导致执行计算密集型任务时多线程实际只能是单线程,而且由于线程之间切换的开销导致多线程往往比实际的单线程还要慢,所以在 python 中计算密集型任务通常使用多进程,因为各个进程有各自独立的

  • Python多进程之进程同步及通信详解

    目录 进程同步 Lock(锁) 进程通信 Queue(队列) Pipe(管道) Semaphore(信号量) Event(事件) 总结 上篇文章介绍了什么是进程.进程与程序的关系.进程的创建与使用.创建进程池等,接下来就来介绍一下进程同步及进程通信. 进程同步 当多个进程使用同一份数据资源的时候,因为进程的运行没有顺序,运行起来也无法控制,如果不加以干预,往往会引发数据安全或顺序混乱的问题,所以要在多个进程读写共享数据资源的时候加以适当的策略,来保证数据的一致性问题. Lock(锁) 一个Loc

  • python多进程和多线程介绍

    目录 一.什么是进程和线程 二.多进程和多线程 三.python中的多进程和多线程 1.多进程 2.多线程 一.什么是进程和线程 进程是分配资源的最小单位,线程是系统调度的最小单位. 当应用程序运行时最少会开启一个进程,此时计算机会为这个进程开辟独立的内存空间,不同的进程享有不同的空间,而一个CPU在同一时刻只能够运行一个进程,其他进程处于等待状态. 一个进程内部包括一个或者多个线程,这些线程共享此进程的内存空间与资源.相当于把一个任务又细分成若干个子任务,每个线程对应一个子任务. 二.多进程和

  • Python多进程并发与同步机制超详细讲解

    目录 多进程 僵尸进程 Process类 函数方式 继承方式 同步机制 状态管理Managers 在<多线程与同步>中介绍了多线程及存在的问题,而通过使用多进程而非线程可有效地绕过全局解释器锁. 因此,通过multiprocessing模块可充分地利用多核CPU的资源. 多进程 多进程是通过multiprocessing包来实现的,multiprocessing.Process对象(和多线程的threading.Thread类似)用来创建一个进程对象: 在类UNIX平台上,需要对每个Proce

  • python多进程及通信实现异步任务的方法

    目录 一.python多进程及通信基本用法 1.多进程的基本实现 a.Process重写run方法 b.使用Process和target方法 c.直接使用Process类 2.多进程的通信 a.Queue b.Pipe 二.python多进程实战 1.使用进程池快速抽取数据 2.多进程及通信完成数据清洗和保存 3.多进程及通信实现异步任务需求 写在最前面,说实话python多进程这块儿知识对于很少使用python多进程或者没有实际使用过多python进程解决问题的人来说,还是有一定难度的.本人也

  • python中的多进程的创建与启动方式

    目录 一.多进程的创建:多进程的创建方法有两种: 1.通过Process创建多进程 Process语法结构: 2.通过进程池创建并启动多进程 3.通过继承的方法创建多进程 4.进程创建与启动完整代码 python中的并发有三种形式,多进程.多线程.协程.执⾏并发任务的⽬的是为了提⾼程序运⾏的效率. 一.多进程的创建:多进程的创建方法有两种: 1.通过Process创建多进程 Process语法结构: Process(group, target, name, args, kwargs) group

  • 深入浅析python中的多进程、多线程、协程

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构--进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控

  • Python中使用subprocess库创建附加进程

    前言 subprocess库提供了一个API创建子进程并与之通信.这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准输入和输出通道来回传数据. 本篇,将详细介绍Python创建附加进行的库:subprocess. run(运行外部命令) subprocess库本身可以替换os.system(),os.spawnv()等函数.现在我们来通过subprocess库运行一个外部命令,但不采用os.system().示例如下: import subprocess complet

  • Python中pandas模块DataFrame创建方法示例

    本文实例讲述了Python中pandas模块DataFrame创建方法.分享给大家供大家参考,具体如下: DataFrame创建 1. 通过列表创建DataFrame 2. 通过字典创建DataFrame 3. 通过Numpy数组创建DataFrame DataFrame这种列表式的数据结构和Excel工作表非常类似,其设计初衷是讲Series的使用场景由一维扩展到多维. DataFrame由按一定顺序的多列数据组成,各列的数据类型可以有所不同(数值.字符串.布尔值). Series对象的Ind

  • Python中根据时间自动创建文件夹的代码实现

    导语 ​ 电脑桌面文件太多查找起来比较花费时间,并且凌乱的电脑桌面也会影响工作心情,于是利用python根据时间自动建立当日文件夹,这样就可以把桌面上文件按时间进行存放. 代码实现 # _*_coding:utf-8_*_ import os import datetime def create_folder(path): # 年-月-日 时:分:秒 now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 年

  • 在Python中如何优雅地创建表格的实现

    目录 1. 引言 2. 准备工作 3. 举个栗子 3.1 使用list生成表格 3.2 使用dict生成表格 3.3 增加索引列 3.4 缺失值处理 4. 总结 1. 引言 如果能够将我们的无序数据快速组织成更易读的格式,对于数据分析非常有帮助. Python 提供了将某些表格数据类型轻松转换为格式良好的纯文本表格的能力,这就是 tabulate 库. 闲话少说,我们直接开始吧. :) 2. 准备工作 安装tabulate库安装tabulate库非常容易,使用pip即可安装,代码如下: pip

  • python中使用input()函数获取用户输入值方式

    我们编写程序最终目的还是来解决实际问题,所以必然会遇到输入输出的交互问题,python中提供了input函数用来获取用户的输入,我们可以用以下程序演示. user_gender = input("Please enter your gender(F/M):") print(f'Your gender is {user_gender}') 要注意的是在sublime编辑器中不支持input的在线输入,所以我们需要去cmd窗口运行这个程序,结果如下所示: 要注意的是input的返回值是字符

  • 一文详解Python中实现单例模式的几种常见方式

    目录 Python 中实现单例模式的几种常见方式 元类(Metaclass): 装饰器(Decorator): 模块(Module): new 方法: Python 中实现单例模式的几种常见方式 元类(Metaclass): class SingletonType(type): """ 单例元类.用于将普通类转换为单例类. """ _instances = {} # 存储单例实例的字典 def __call__(cls, *args, **kwa

  • 协程Python 中实现多任务耗资源最小的方式

    协程,又称微线程,纤程.英文名 Coroutine. 协程是 Python 中另外一种实现多任务的方式,只不过比线程更小,占用更小执行单元(理解为需要的资源). 为啥说它是一个执行单元,因为它自带 CPU 上下文.这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程. 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的. 通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的

随机推荐