iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 进程间通信
  • 501
分享到

python 进程间通信

进程通信python 2023-01-31 02:01:53 501人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python multiprocessing multiprocessing 在2.6才开始使用 multiprocessing 是一个使用方法类似threading模块的进程模块。允许程序员做并行开发。并且可以在UNIX和windo

python multiprocessing

multiprocessing

在2.6才开始使用
multiprocessing 是一个使用方法类似threading模块的进程模块。允许程序员做并行开发。并且可以在UNIX和windows下运行。
通过创建一个Process 类型并且通过调用call()方法spawn一个进程。

一个比较简单的例子:
#!/usr/bin/env Python

from multiprocessing import Process
import time
def f(name):
time.sleep(1)
print 'hello ',name
print os.getppid() #取得父进程ID
print os.getpid()  #取得进程ID
process_list = []
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(i,))
p.start()
process_list.append(p)
for j in process_list:
j.join()

进程间通信:
有两种主要的方式:Queue、Pipe
1- Queue类几乎就是Queue.Queue的复制,示例:
#!/usr/bin/env python

from multiprocessing import Process,Queue
import time
def f(name):
time.sleep(1)
q.put(['hello'+str(name)])
process_list = []
q = Queue()
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(i,))
p.start()
process_list.append(p)
for j in process_list:
j.join()
for i in range(10):
print q.get()
2- Pipe 管道
#!/usr/bin/env python

from multiprocessing import Process,Pipe
import time
import os

def f(conn,name):
time.sleep(1)
conn.send(['hello'+str(name)])
print os.getppid(),'-----------',os.getpid()
process_list = []
parent_conn,child_conn = Pipe()
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(child_conn,i))
p.start()
process_list.append(p)
for j in process_list:
j.join()
for p in range(10):
print parent_conn.recv()
Pipe()返回两个连接类,代表两个方向。如果两个进程在管道的两边同时读或同时写,会有可能造成corruption.


进程间同步
multiprocessing contains equivalents of all the synchronization primitives from threading.
例如,可以加一个,以使某一时刻只有一个进程print
#!/usr/bin/env python

from multiprocessing import Process,Lock
import time
import os

def f(name):
lock.acquire()
time.sleep(1)
print 'hello--'+str(name)
print os.getppid(),'-----------',os.getpid()
lock.release()
process_list = []
lock = Lock()
if __name__ == '__main__':
for i in range(10):
p = Process(target=f,args=(i,))
p.start()
process_list.append(p)
for j in process_list:
j.join()

进程间共享状态 Sharing state between processes

当然尽最大可能防止使用共享状态,但最终有可能会使用到.
1-共享内存
可以通过使用Value或者Array把数据存储在一个共享的内存表中
#!/usr/bin/env python

from multiprocessing import Process,Value,Array
import time
import os

def f(n,a,name):
time.sleep(1)
n.value = name * name
for i in range(len(a)):
a[i] = -i
process_list = []
if __name__ == '__main__':
num = Value('d',0.0)
arr = Array('i',range(10))
for i in range(10):
p = Process(target=f,args=(num,arr,i))
p.start()
process_list.append(p)
for j in process_list:
j.join()
print num.value
print arr[:]
输出:
jimin@Jimin:~/projects$ python pp.py
81.0
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
'd'和'i'参数是num和arr用来设置类型,d表示一个双精浮点类型,i表示一个带符号的整型。
更加灵活的共享内存可以使用multiprocessing.sharectypes模块

Server process
Manager()返回一个manager类型,控制一个server process,可以允许其它进程通过代理复制一些python objects
支持list,dict,Namespace,Lock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value,Array
例如:
#!/usr/bin/env python

from multiprocessing import Process,Manager
import time
import os

def f(d,name):
time.sleep(1)
d[name] = name * name
print d
process_list = []
if __name__ == '__main__':
manager = Manager()
d = manager.dict()
for i in range(10):
p = Process(target=f,args=(d,i))
p.start()
process_list.append(p)
for j in process_list:
j.join()
print d
输出结果:
{2: 4}
{2: 4, 3: 9}
{2: 4, 3: 9, 4: 16}
{1: 1, 2: 4, 3: 9, 4: 16}
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 8: 64}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
Server process managers比共享内存方法更加的灵活,一个单独的manager可以被同一网络的不同计算机的多个进程共享。
比共享内存更加的缓慢

使用工作池 Using a pool of workers
Pool类代表 a pool of worker processes.
It has methods which allows tasks to be offloaded to the worker processes in a few different ways.

--结束END--

本文标题: python 进程间通信

本文链接: https://www.lsjlt.com/news/187075.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • python 进程间通信
    python multiprocessing multiprocessing 在2.6才开始使用 multiprocessing 是一个使用方法类似threading模块的进程模块。允许程序员做并行开发。并且可以在UNIX和Windo...
    99+
    2023-01-31
    进程 通信 python
  • Python进程间通信方式
    目录一、通信方式二、Queue介绍三、方法介绍三、生产者和消费者模型四、什么是生产者消费者模式实现方式一:Queue实现方式二:利用JoinableQueue一、通信方式 进程彼此之...
    99+
    2022-11-13
  • Python的进程间通信详解
    目录进程概述队列简介多进程队列的使用使用队列在进程间通信总结进程概述 ​ 进程(Process)是计算机中已运行程序的实体。进程与程序不同,程序本身只是指令、数据及器组织形式的描述,...
    99+
    2022-11-13
  • python中进程间如何通信
    今天就跟大家聊聊有关python中进程间如何通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy;...
    99+
    2023-06-14
  • Linux-进程间通信
    进程间通信 进程间通信介绍进程间通信目的进程间通信发展进程间通信分类 管道匿名管道匿名管道特点匿名管道读写规则 命名管道创建一个命名管道命名管道的打开规则用命名管道实现server&client通信 system...
    99+
    2023-08-19
    linux 服务器 网络 c++ C语言
  • 【Linux】进程间通信
    目录 1. 进程间通信 1.1. 进程间通信的目的 1.2. 如何实现进程间通信 2. 管道通信 2.1. 匿名管道 2.1.1 创建匿名管道 2.1.2 . 深入理解匿名管道 2.2. 命名管道 2.2.1. 创建命名管道 3. sys...
    99+
    2023-10-26
    linux 运维 服务器 操作系统 进程间通信
  • 进程间的通信
      使用 multiprocessing 里的 Queue() import multiprocessing def download_from_web(q): """下载数据""" # 模拟从网上下载的数据 ...
    99+
    2023-01-30
    进程 通信
  • python多进程实现进程间通信实例
    python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个...
    99+
    2022-06-04
    进程 实例 通信
  • python中进程间通信详细介绍
    目录进程间通信(IPC)管道通信(Pipe)1.通信原理2. 实现方法共享内存1.通信原理2.实现方法信号量(信号灯集)1.通信原理2. 实现方法3.代码演示进程间通信(IPC) 必...
    99+
    2022-11-12
  • python进程间通信的项目实践
    目录各种通信机制队列管道管理器管理器命名空间的概念Ctypes数组和值进程间通信表示进程之间的数据交换。 为了开发并行应用程序,需要在进程间交换数据。 下图显示了多个子过程之间同步的...
    99+
    2023-03-10
    python进程间通信
  • Python进程间通信之共享内存
    前一篇博客说了怎样通过命名管道实现进程间通信,但是要在windows是使用命名管道,需要使用python调研windows api,太麻烦,于是想到是不是可以通过共享内存的方式来实现。查了一下,Python中可以使用mmap模块来...
    99+
    2023-01-31
    进程 内存 通信
  • Python通过队列实现进程间通信详情
    目录一、前言二、队列简介三、多进程队列的使用四、使用队列在进程间通信一、前言 在多进程中,每个进程之间是什么关系呢?其实每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行状态...
    99+
    2022-11-11
  • 通过Python脚本理解系统进程间通信
    from socket import *  #导入socket包中的所有内容from time import ctime #导入time包,同时在本地可使用ctime进行调用import os,sys #导入os,sys包HOST='loc...
    99+
    2023-01-31
    脚本 进程 通信
  • Python如何通过队列实现进程间通信
    本篇内容主要讲解“Python如何通过队列实现进程间通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何通过队列实现进程间通信”吧!一、前言在多进程中,每个进程之间是什么关系呢?其...
    99+
    2023-07-02
  • 如何使用Python中的进程间通信
    如何使用Python中的进程间通信进程间通信(IPC,Inter-Process Communication)是计算机科学中一个重要的概念,它允许不同的进程在同一个计算机系统中进行数据交换和共享资源。在Python中,有多种方式可以实现进程...
    99+
    2023-10-22
    Python 进程通信 IPC
  • Python中进程间通信的示例分析
    这篇文章给大家分享的是有关Python中进程间通信的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。进程概述进程(Process)是计算机中已运行程序的实体。进程与程序不同,程序本身只是指令、数据及器组织形...
    99+
    2023-06-29
  • python进程间的通信机制是什么
    本文小编为大家详细介绍“python进程间的通信机制是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“python进程间的通信机制是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。进程间通信表示进程之间的数...
    99+
    2023-07-05
  • Python进程间通信之命名管道(Win
    前面文章说了一下 Linux 命名管道的实现,今天看看 Windows 上我们怎么实现。 在 Windows 上的命名管道主要是通过调用 win32 api 的以下方法来实现的: - win32pipe.CreateNamedP...
    99+
    2023-01-31
    管道 进程 通信
  • Python进程间的通信方式是什么
    这篇文章主要介绍“Python进程间的通信方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python进程间的通信方式是什么”文章能帮助大家解决问题。什么是进程的通信这里举一个例子接介绍通信...
    99+
    2023-06-29
  • golang进程间怎么通信
    在Go语言中,进程间通信可以使用以下几种方式: 1.管道(Pipe):通过Pipe可以在父子进程之间实现单向通信。在Go语言中,可以...
    99+
    2023-10-20
    golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作