从孤岛到大陆:Python进程间通信,让你的代码世界不再有隔阂

简介: 【8月更文挑战第1天】在编程领域,Python进程曾像孤岛般各自运行于独立内存中。随项目复杂度增长,进程协同变得重要。Python提供了多种机制搭建这些孤岛间的桥梁。本文介绍四种常见进程间通信(IPC)方式:管道(Pipes)、队列(Queues)、共享内存(Shared Memory)及套接字(Sockets),并附示例代码展示如何实现信息自由流通,使进程紧密相连,共建复杂程序世界。

在编程的浩瀚宇宙中,每个Python进程曾像是一座座孤岛,各自运行在自己的内存空间内,互不相通。然而,随着项目复杂度的提升,进程间的协同工作变得至关重要。幸运的是,Python提供了多种机制,让这些孤岛能够搭起桥梁,形成一片广阔无垠的大陆,实现信息的自由流通。本文将带你探索几种常见的Python进程间通信(IPC)方式,并通过示例代码,展示如何打破隔阂,让代码世界紧密相连。

  1. 管道(Pipes)
    管道是Unix/Linux系统中一种最基本的IPC机制,它允许一个进程(写进程)将数据传输给另一个进程(读进程)。在Python中,可以通过multiprocessing模块中的Pipe()函数来创建管道。

python
from multiprocessing import Process, Pipe

def sender(conn):
conn.send(['hello', 'world'])
conn.close()

def receiver(conn):
print(conn.recv())
conn.close()

if name == 'main':
parent_conn, child_conn = Pipe()
p1 = Process(target=sender, args=(child_conn,))
p2 = Process(target=receiver, args=(parent_conn,))
p1.start()
p2.start()
p1.join()
p2.join()

  1. 队列(Queues)
    队列是另一种常用的IPC机制,它允许多个进程安全地存取数据。Python的multiprocessing.Queue是一个线程和进程安全的队列实现。

python
from multiprocessing import Process, Queue

def worker(q):
q.put('Hello World')

if name == 'main':
q = Queue()
p = Process(target=worker, args=(q,))
p.start()
print(q.get()) # 输出: Hello World
p.join()

  1. 共享内存(Shared Memory)
    对于需要高效传输大量数据的场景,共享内存是理想的选择。Python的multiprocessing.Value和multiprocessing.Array允许进程间共享基本数据类型和数组。

python
from multiprocessing import Process, Value, Lock

def increment(num, lock):
with lock:
num.value += 1

if name == 'main':
lock = Lock()
num = Value('i', 0)
p = Process(target=increment, args=(num, lock))
p.start()
p.join()
print(num.value) # 输出: 1

  1. 套接字(Sockets)
    虽然套接字通常用于网络间通信,但也可以用于同一台机器上的不同进程间通信。Python的socket模块提供了TCP和UDP套接字的支持。

python
import socket

def server():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('localhost', 12345))
s.listen()
conn, addr = s.accept()
with conn:
print(conn.recv(1024).decode())

def client():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('localhost', 12345))
s.sendall(b'Hello, server!')

if name == 'main':
from threading import Thread
t1 = Thread(target=server)
t2 = Thread(target=client)
t1.start()
t2.start()
t1.join()
t2.join()
通过这些IPC机制,Python进程间不再是孤立的岛屿,而是紧密相连的大陆,共同构建出更加丰富、复杂的程序世界。

相关文章
|
11月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
475 26
|
10月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
401 100
|
10月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
617 95
|
11月前
|
Python
Python的简洁之道:5个让代码更优雅的技巧
Python的简洁之道:5个让代码更优雅的技巧
424 104
|
11月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
716 99
|
10月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
539 88
|
10月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1622 68
|
11月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
1098 7
|
11月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
475 2
|
11月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。

推荐镜像

更多