进程间通信及python实现

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
进程间通信方式:

系统可以运行多进程,有时进程间需要通信传递信息,进程间通信的方式有:管道、消息队列、共享内存、信号、信号量、套接字

管道:

原理:在内存中开辟管道空间,生成管道对象,多个进程对管道对象进行读写,实现进程间通信,但是multiprocessing模块的管道通信只能在亲缘关系的进程中通信

from multiprocessing import Pipe
from multiprocessing import Process
#父进程中创建管道对象(双向管道)
fd_one, fd_two = Pipe(duplex=True)
#将进程的功能封装成函数,使用Process创建进程
def pro01_func():
	a = 1
	fd_one.send(a)
	data = fd_one.recv()
	if data:
		a = a + data
		print(a)
def pro02_func():
	b = 1
	data = fd_two.recv()
	if data == 1:
		fd_two.send(b)
#将函数加入列表中
pro_list = [pro01_func, pro02_func]
data_list = []
#创建多进程
for pro in pro_list:
	p = Process(target=pro)
	data_list.append(p)
	p.start()
#对进程进行回收
for pro_start in data_list:
	pro_start.join()
消息队列

原理:在内存中开辟队列空间,进程向队列中写入消息,其他进程从队列中读取消息

#创建2个子进程,一个进程向消息队列中传入消息,另一个进程从队列中获取消息并打印显示
from multiprocessing import Process, Queue
from time import sleep
from random import randint
#创建消息队列对象,设置队列中消息最大数量
q = Queue(maxsize=4, block=True, timeout=2)
def child_pro_get():
	while not q.empty():
		print(q.get())
		sleep(2)
def child_pro_put():
	while True:
		p.put(randint(1,10))
		sleep(1.5)
p_get = Process(target=child_pro_get)
p_put = Process(target=child_pro_put)
p_put.start()
p_get.start()
#程序会报错,因为消息队列容量满时继续添加会报错
共享内存

原理:在内存中创建一个空间,用来存储进程间通信的信息,但每次对共享内存进行存入都会覆盖上次的消息,由于结构复杂,所以操作的效率高

from multiprocessing import Process, Value, Array
v = Value(ctype='i', 10)
def pro01():
	v.value += 1
	print('pro01:', v.value)
def pro02():
	v.value -= 1
	print('pro02:',v.value)
pro_01 = Process(target=pro01)
pro_02 = Process(target=pro02)
pro_01.start()
pro_02.start()
pro_01.join()
pro_02.join()
print('parent:', v.value)
信号量

原理:给定一个数字对多个进程可见,当信号量达到一定量时,对进程进行操作

from multiprocessing import Semaphore, Process
from time import sleep
#创建信号量对象,初始化信号量的值
sem = Semaphore(1)
def func_pro():
	while True:
		sem.release() #对信号量进行+1操作
		if sem.get_value() == 5: #获取信号量的值
			break
		sleep(1)
pro = Process(target=func_pro)
pro.start()
pro.join()
如何用python实现——进程间通信IPC的主要方式? 计算机通信方式主要有如下几种,本文会详细介绍以下几种通信方式以及对应使用Python实现方法,能够在学习理论的同时,也结合到Code层面,学以致用。 前言 每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间通信必须通过内核。 如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号930900780,可领取python学习资料,会节约很多时间,减少很多遇到的难题。 1.管道 如果你... 阅读详情

相关推荐

Python脚本实现系统进程间通信

通过使用管道、共享内存消息队列等方法,不同进程可以方便地进行数据交换协作。你可以根据具体的需求选择合适的通信方式,并根据示例代码进行进一步的开发扩展。系统进程间通信是计算机系统中常见的一种通信方式,用于不同进程之间的数据交换协作。在Python中,我们可以使用多种方法实现系统进程间通信,包括管道、共享内存消息队列等。共享内存是一种高效的进程间通信方式,它允许多个进程共享同一块内存区域。消息队列是一种常见的进程间通信方式,用于在进程之间消息。管道是一种常用的进程间通信方式,Python中的。

CodeWWWCode的博客 106

Python基础——多进程进程间通信

文件中包含文件的拷贝方法,多进程的基础概念,相关函数的用法,队列的先进先出,共享内存等内容。

使用Python实现进程间通信(Pipe)

进程间通信(Inter-Process Communication,简称IPC)是多进程编程中常用的技术,它允许不同进程之间进行数据传输共享。当我们运行以上代码时,发送进程会将消息发送到管道中,接收进程会从管道中读取到该消息,并打印出来。管道(Pipe)是一种单向通信机制,允许一个进程将数据入管道,而另一个进程则可以从管道中读取数据。需要注意的是,管道是单向的,如果需要双向通信,可以创建两个管道,分别用于不同方向的数据传输。类,我们可以在不同的进程之间传输数据,实现更加复杂的通信机制。

CodeByte的博客 614

python 进程间通信_python进程实现进程间通信实例

python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程通信共享数据、执行不同形式的同步,提供了Process、Que...

weixin_39754616的博客 371

Python 与 C++ 的进程通信

python与c++之间进程通信:管道通信,socket,共享内存等

weixin_43152152的博客 9219

由浅入深掌握各种 Python 进程间通信方式(建议收藏)

介绍 python multiprocessing 多进程模块提供的各类通信方式的数据结构 、原理、以及使用步骤,包括Pipe管道通信,Queue队列通信,Lock共享锁,Event同步事件,SharedMemory 共享变量Value, Array, SharedMomory 模块共享内存,最后介绍了使用共享内存管理器Manager的原理与使用,确保进程通信的安全。

Python技术探索 1万+

Python进程间通信

通信方式 进程彼此之间互相隔离,要实现进程间通信IPC),multiprocessing模块主要通过队列方式 队列:队列类似于一条管道,元素先进先出 需要注意的一点是:队列都是在内存中操作,进程退出,队列清空,另外,队列也是一个阻塞的形态 Queue介绍: ...

GMH的博客 8046

python中的进程间通信

Python中,进程之间默认是不共享内存的。每个进程都有自己独立的内存空间,这意味着在一个进程中对数据的修改不会影响到另一个进程中的同名数据。: Python 的: 进程可以通过读文件或操作数据库来交换信息。这种方法相对简单但可能受到I/O性能限制。:如队列(Queue)管道(Pipe),这些也是提供的功能。它们允许将消息从一个进程递到另一个,虽然严格意义上不是共享内存,但它们是进行数据交换任务协调非常有效的手段。下面是一个简单示例代码说明,在不使用Value的情况下。

瑞瑞的博客 1906

Python中通过队列实现进程间通信

让我们一起实现队列实现进程间的通信(一起努力,咱们顶峰相见)

精益求精,永无止境,永远在路上! 1607

python进程间通信_Python 中通过队列来实现进程间通信

Python程序中,在进程进程之间是不共享全局变量的数据的。我们来看一个例子:from multiprocessing import Process import os import time nums = [11, 22] def work1(): """子进程要执行的代码""" print("in process1 pid=%d ,nums=%s" % (os.getp...

weixin_42304279的博客 195

python 队列实现_Python进程间通信 multiProcessing Queue队列实现详解

Python进程间通信 multiProcessing Queue队列实现详解发布时间:2020-10-04 10:11:18来源:脚本之家阅读:125一、进程间通信IPC(Inter-Process Communication)IPC机制:实现进程之间通讯管道:pipe 基于共享的内存空间队列:pipe+锁的概念--->queue二、队列(Queue)2.1 概念-----multiProces...

weixin_39576018的博客 525

python 进程间通信效率_Python进程间通信 multiProcessing Queue队列实现详解

一、进程间通信IPC(Inter-Process Communication)IPC机制:实现进程之间通讯管道:pipe 基于共享的内存空间队列:pipe+锁的概念--->queue二、队列(Queue)2.1 概念-----multiProcess.Queue创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现进程之间的数据递。Queue([maxsize])创建共...

weixin_39598135的博客 395

python进程间通信 listener_python 进程 进程进程间通信实现解析

1.python 中创建进程的两种方式:from multiprocessing import Processimport timedef test_():print '-----test-----'if __name__ == '__main__':p = Process(target=test_)p.start()while True:print '--main--''''1.通过proces...

weixin_39915210的博客 121

[转]Python进程间通信的2种实现方法(QueuePipe)

转载自:http://c.biancheng.net/view/2635.html 其中代码部分未做执行验证。 Queue实现进程间通信 前面讲解了使用 Queue 模块中的 Queue 类实现线程间通信,但要实现进程间通信,需要使用 multiprocessing 模块中的 Queue 类。 简单的理解 Queue 实现进程间通信的方式,就是使用了操作系统给开辟的一个队列空间,各个进程可以把数据放到该队列中,当然也可以从队列中把自己需要的信息取走。 Queue 类提供了诸多实现进程间通信的方法,表

madrabbit1987的博客 306

Python进程间通信实现进程之间的数据交换与共享

这里,发送方进程(`sender`)将一条消息发送给接收方进程(`receiver`),接收方进程接收消息并进行打印出。管道是一种简单有效的进程间通信方式,Python中的`multiprocessing`模块提供了`Pipe`类用于创建管道。在上面的示例中,我们创建了一个`Value`对象一个`Array`对象,分别用于存储一个数值一个数组。在Python中,`multiprocessing`模块提供了`Value``Array`两个类用于创建共享内存。套接字是一种在网络上实现进程间通信的机制。

m0_70911440的博客 5223

一文攻克Python进程以及如何实现进程间通信(队列)

Python进程以及如何实现进程间通信一、进程概念二、创建进程的常用方式1、使用multiprocessing模块创建进程2、使用Process子类创建进程3、 使用进程池Pool创建进程三、通过队列实现进程间通信1、不通过其他条件,进程之间是否能共享信息?2、多线程队列的简单使用3、使用队列在进程通信 一、进程概念 在了解进程之前,先了解多任务。多任务就是指操作系统能够执行多个任务。例如,使用Window或Linux操作系统可以同时看电影、聊天、查看网页信息等,此时操作系统就是在执行多任务,而每一个任

qq_42585108的博客 1522

python通信方式_进程间通信IPC的主要方式有哪些?大佬教你用python实现

计算机通信方式主要有如下几种,本文会详细介绍以下几种通信方式以及对应使用Python实现方法,能够在学习理论的同时,也结合到Code层面,学以致用。​前言每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间通信必须通过内核。如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号930900780,可领取p...

weixin_39621488的博客 218

python 进程间通信 socket_python实现进程间通信简单实例

本文实例讲解了python实现两个程序之间通信的方法,具体方法如下:该实例采用socket实现,与socket网络编程不一样的是socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)的第一个参数是socket.AF_UNIX而不是 socket.AF_INET例中两个python程序 s.py/c.py 要先运行s.py基于fedora13/python...

weixin_39695241的博客 127

进程间通信实现(C++,python, 以及C++与python之间通信

进程间的通信可以采用 管道, 消息队列,共享内存,信号量,套接字 本次尝试采用套接字的形式实现不同进程之间的数据交互 python 的socket实现(Tcp形式) 服务端, 采用tcp的形式完成数据的交互 import socket send_data = socket.socket(socket.AF_INET, socket.SOCK_STREAM) send_data.bind(('127.0.0.1',5000)) send_data.listen(5) conn,address =

Chasing的博客 3441
上一篇: python3实现多进程示例代码
下一篇: python 实现I/O多路复用
Fire_Pot
博客等级 码龄7年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值