首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[教程]Python脚本之间通信的几种高效方式

发布于 2025-11-28 09:30:09
0
163

在Python编程中,脚本之间的通信是常见的需求,尤其是在需要多个脚本协同工作时。以下是一些高效实现Python脚本之间通信的方式:1. 使用标准库中的multiprocessingPython的mu...

在Python编程中,脚本之间的通信是常见的需求,尤其是在需要多个脚本协同工作时。以下是一些高效实现Python脚本之间通信的方式:

1. 使用标准库中的multiprocessing

Python的multiprocessing模块提供了多种进程间通信的方法,以下是一些常用的:

1.1 使用Queue

Queue是一个线程和进程安全的队列,可以用来在不同的进程之间传递消息。

from multiprocessing import Process, Queue
def worker(queue): queue.put("Hello from worker")
if __name__ == "__main__": q = Queue() p = Process(target=worker, args=(q,)) p.start() print(q.get()) p.join()

1.2 使用Pipe

Pipe提供了一组双向通道,可以在两个进程之间进行通信。

from multiprocessing import Process, Pipe
def worker(conn): conn.send("Hello from worker") conn.close()
if __name__ == "__main__": parent_conn, child_conn = Pipe() p = Process(target=worker, args=(child_conn,)) p.start() print(parent_conn.recv(1024)) p.join()

1.3 使用Manager

Manager对象允许你创建可以在多个进程间共享的数据结构。

from multiprocessing import Manager
if __name__ == "__main__": with Manager() as manager: shared_dict = manager.dict() shared_dict['key'] = 'value' print(shared_dict['key'])

2. 使用subprocess

subprocess模块可以用来创建子进程,并与之通信。

2.1 通过Popen

Popen类可以用来启动一个新的进程,并通过管道与该进程通信。

import subprocess
proc = subprocess.Popen(['python', 'child_script.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout, stderr = proc.communicate(input='Hello from parent\n')
print(stdout.decode())

2.2 通过call

call方法可以用来运行命令,并等待它执行完成。

import subprocess
subprocess.call(['python', 'child_script.py', 'Hello from parent'])

3. 使用socket

socket模块可以用来在不同的机器或同一台机器的不同脚本之间进行网络通信。

3.1 TCP客户端/服务器

import socket
# 服务器端
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen()
conn, addr = server_socket.accept()
with conn: print('Connected by', addr) while True: data = conn.recv(1024) if not data: break conn.sendall(data)
# 客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
client_socket.sendall(b'Hello from client')
data = client_socket.recv(1024)
print('Received:', data.decode())
client_socket.close()

3.2 UDP

import socket
# UDP发送
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello from client', ('localhost', 12345))
# UDP接收
sock.bind(('localhost', 12345))
data, addr = sock.recvfrom(1024)
print('Received:', data.decode())
sock.close()

4. 使用ZeroMQ

ZeroMQ是一个开源的高性能消息队列库,适用于多种通信模式。

import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
socket.setsockopt_string(zmq.SUBSCRIBE, "")
while True: message = socket.recv() print("Received message:", message.decode())

这些方法提供了多种选择,以适应不同的脚本通信需求。根据具体情况选择合适的方法,可以有效地实现Python脚本之间的通信。

评论
一个月内的热帖推荐
csdn大佬
Lv.1普通用户

452398

帖子

22

小组

841

积分

赞助商广告
站长交流