我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python并发执行之多进程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python并发执行之多进程

    多进程顾名思义程序启动的时候运行多个进程,每个进程启动一条线程进行程序处理。 没启动一个进程就要单独划分一块内存资源。就像工厂的厂房。为了提高效率每多添加一条生产线就要单独再盖一个厂房。每个厂房相互是独立的。所以启动多进程是很消耗资源的,毕竟厂房盖多了厂区就没地方给其他设施用了。

    多进程的代码实现方法和多线程的函数方式很类似

#!/usr/bin/env python
# -*-coding:utf-8-*-
from multiprocessing import Process
#引用的模块变成了多进程模块
def foo(i):
    print 'say hi',i
for i in range(10):
    """
    同时启动10个进程,把Process()实例化给p
    调用p.start()方法启动每个进程
    """
    p = Process(target=foo,args=(i,))
    p.start()

上面提到了多进程之间数据是相互独立的,我们来写一段代码测试一下

#!/usr/bin/env python
#coding:utf-8
 
from multiprocessing import Process
 
li = []
 
def foo(i):
#向列表中加入当前的进程序列号
    li.append(i)
    print 'say hi',li
  
for i in range(10):
    p = Process(target=foo,args=(i,))
    p.start()
     
print 'ending',li

上面的代码运行结果是

[wgw@mail ~]$ python test.py 
say hi [0]
say hi [1]
say hi [2]
say hi [3]
say hi [4]
say hi [5]
say hi [6]
say hi [7]
say hi [8]
ending []
say hi [9]

    注意看ending [] 这一列。通过代码我们得知每个一个派生的子进程都会调用foo()函数并将自己的进程运行序列号添加到li表中。但是当最后我们要查看li[]表里存储的内容,我们并没有看到自己希望看到[0,1,2...9]的内容这是为什么呢?这其实就是进程的内存相互独立导致的。我们创建了进程0,那么进程就复制了一个空列表li[],并把0追加到表里。那么对于进程0来说li列表的内容就是li[0]。但是进程1在启动之后也和进程0一样复制了一个空列表li[],对于进程1来说运行结束时候自己的列表li的内容就是li[1]。以此类推,启动了10个子进程就复制了10个li[]空列表。每个进程中的列表都是相互独立的,而程序的最后我们打印的是最主进程的那个li[]列表,这个列表没有被操作过所以还是空的。通过这里我们也可以得知,多进程的时候每个进程都要对资源进行复制。所以进程启动多了会异常的消耗资源。

    如果我们要让进程间数据同步,就需要借助multiprocessing模块中的Manager方法来管理特殊的列表或者字典。通过这种特殊方法来实现进程间数据的同步。看代码

#!/usr/bin/env python
# -*-coding:utf-8-*-
from multiprocessing import Process,Manager
def foo(i,Manger_list):
    """
    函数要引用别Manger方法管理的特殊列表,这列表的
    操作和标准列表是完全一致的。
    """
    Manger_list.append(i)
    print 'say hi',li
if __name__=='__main__':
    #定义一个空列表储存生成的多进程句柄
    p_list=[]
    #实例化Manager方法
    manager=Manager()
    #声明li是被manger管理的特殊列表
    li = manager.list()
    for i in range(10):
        #将进程的启动序列号和特殊列表赋值给foo()函数
        p = Process(target=foo,args=(i,li))
        p_list.append(p)
    for p in p_list:
        #执行多进程句柄,交给CPU调度
        p.start()
    for p in p_list:
        #在最后一个子进程结束前,不能停止主进程
        p.join()
    #主进程结束后打印主进程中li列表的内容
    print 'ending',li

这段代码的运行结果是

say hi [0]
say hi [0, 7]
say hi [0, 7, 4]
say hi [0, 7, 4, 5]
say hi [0, 7, 4, 5, 6]
say hi [0, 7, 4, 5, 6, 2]
say hi [0, 7, 4, 5, 6, 2, 9]
say hi [0, 7, 4, 5, 6, 2, 9, 3]
say hi [0, 7, 4, 5, 6, 2, 9, 3, 8]
say hi [0, 7, 4, 5, 6, 2, 9, 3, 8, 1]
ending [0, 7, 4, 5, 6, 2, 9, 3, 8, 1]

从上面的结果就可以看出来,虽然进程执行结束的顺序和启动时候的顺序不一样了。但是每个子进程的执行结果都被追加到了同一个li列表中。并且最后主进程的li列表内容和子进程的的内容一致。说明通过multiprocessing.Manager()方法可以让多进程像多线程一样实现内存数据的共享。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python并发执行之多进程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python并发执行之多进程

多进程顾名思义程序启动的时候运行多个进程,每个进程启动一条线程进行程序处理。 没启动一个进程就要单独划分一块内存资源。就像工厂的厂房。为了提高效率每多添加一条生产线就要单独再盖一个厂房。每个厂房相互是独立的。所以启动多进程是很消耗资源的,毕
2023-01-31

python 并发执行之多线程

正常情况下,我们在启动一个程序的时候。这个程序会先启动一个进程,启动之后这个进程会拉起来一个线程。这个线程再去处理事务。也就是说真正干活的是线程,进程这玩意只负责向系统要内存,要资源但是进程自己是不干活的。默认情况下只有一个进程只会拉起来一
2023-01-31

python并发编程之多进程

阅读目录一 multiprocessing模块介绍二 Process类的介绍三 Process类的使用四 守护进程一  multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os
2023-01-30

如何使用Python中的多线程进行任务并发执行

如何使用Python中的多线程进行任务并发执行多线程是一种常用的并发编程技术,可以提高程序的执行效率。在Python中,使用多线程可以实现任务的并发执行,从而加快程序的运行速度。本文将介绍如何使用Python中的多线程进行任务的并发执行,并
2023-10-22

Golang多进程编程指南:实现并发执行

在当今快节奏的互联网时代,高效的并发编程成为了开发者们不可或缺的技能之一。而在众多编程语言中,Golang(或称Go语言)以其优雅简洁的语法以及强大的并发支持而备受青睐。本文将从Golang的多进程编程角度出发,探讨如何实现并发执行,并提供
Golang多进程编程指南:实现并发执行
2024-02-29

Python多进程并发(multipro

A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Cond
2023-01-31

java多线程并发执行怎么实现

在Java中实现多线程的并发执行有多种方式,以下是其中的几种常见方法:1. 继承Thread类:创建一个继承自Thread类的子类,并重写其run()方法。然后创建多个该子类的实例,并调用start()方法来启动线程。```javaclas
2023-09-27

java怎么实现多线程并发执行

Java实现多线程并发执行的方式有两种:继承Thread类和实现Runnable接口。继承Thread类:定义一个类,继承Thread类,重写run()方法,在run()方法中写入线程执行的逻辑。创建线程对象,调用start()方法启动线
2023-10-25

Python学习之进程和并发

从Python2.4 以后,subprocess模块负责衍生出新的进程,和标准输入,标准输出,标准错误输出交互,并监听返回值。Subprocess模块是用来取代一些老的模块,例如os.system, os.spawn, os.popen和p
2023-01-31

python实现多线程的方式及多条命令并发执行

一、概念介绍Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__i
2022-06-04

java多线程并发执行如何操作

在Java中,可以使用多种方式来实现多线程的并发执行,以下是一些常见的操作方式:继承Thread类:创建一个继承自Thread类的子类,并重写run()方法,在run()方法中定义线程的执行逻辑。然后实例化该子类对象,并调用start()方
2023-10-23

python并发编程之多进程、多线程、异步和协程详解

最近学习python并发,于是对多进程、多线程、异步和协程做了个总结。 一、多线程多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计算机,也可以通过不停地在不同线程的指令
2022-06-04

Golang 进程调度:优化并发执行效率

go 进程调度使用协作式算法,优化方法包括:尽可能使用轻量级协程合理分配协程避免阻塞操作使用锁和同步原语Go 进程调度:优化并发执行效率在 Go 中,进程调度是决定在并发环境中如何分配 CPU 时间给协程的过程。高效的进程调度对于最大化应
Golang 进程调度:优化并发执行效率
2024-04-03

python并发编程之多线程编程

一、threading模块介绍multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍二、开启线程的两种方式方式一: from threading import Threa
2023-01-31

Java并发编程之LongAdder执行情况解析

这篇文章主要为大家介绍了Java并发编程之LongAdder执行情况解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-18

怎么进行Python多线程并发的简单测试

怎么进行Python多线程并发的简单测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前也写了一些简单的Python程序,对于多线程的并发一直没有涉及,今天决定先突破一下
2023-06-04

Python并发编程之线程池/进程池

原文来自开源中国前言python标准库提供线程和多处理模块来编写相应的多线程/多进程代码,但当项目达到一定规模时,频繁地创建/销毁进程或线程是非常消耗资源的,此时我们必须编写自己的线程池/进程池来交换时间空间。但是从Python3.2开始,
2023-06-02

Java多线程并发、并行、线程与进程实例分析

本篇内容介绍了“Java多线程并发、并行、线程与进程实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、并发与并行并发:指两个或多个事
2023-07-02

如何使用Python进行多线程并发下载图片

这篇文章主要介绍“如何使用Python进行多线程并发下载图片”,在日常操作中,相信很多人在如何使用Python进行多线程并发下载图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Python进行多线程
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录