Python中如何解决远程通信的问题?

本人 python 新人爱好者一枚,现在可以自己写一些小 python 脚本提高日常工作效率。

最近想实现一些远程的数据传输与功能调用。例如将客户端采集或生成的数据传递给服务器做统一处理或反馈。

现在能想到的方法一个是使用 SOCKET。又或者在远端的服务器用 python 实现 web api 来进行调用。

请问各位前辈,还有哪些方式可以实现类似想法。哪种方式更好一些?
Python中如何解决远程通信的问题?

6 回复

RPC 和 http 都行
数据传输的话,thrift 是一个不错的选择
饿了么有开源的 thrift python 实现 https://github.com/eleme/thriftpy


对于Python中的远程通信,最直接的方式是使用socket模块进行底层网络编程,或者用更高层的库如requests(HTTP)、aiohttp(异步HTTP)、grpcio(gRPC)等。选择哪种方案取决于你的具体需求:是简单的HTTP API调用,还是需要双向流式通信,或者是高性能的RPC。

这里给你一个用socket实现简单TCP客户端/服务端的例子,这是最基础的远程通信方式:

# 服务端 server.py
import socket

def start_server(host='127.0.0.1', port=65432):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((host, port))
        s.listen()
        print(f"服务端监听在 {host}:{port}")
        conn, addr = s.accept()
        with conn:
            print(f"连接来自 {addr}")
            data = conn.recv(1024)
            print(f"收到数据: {data.decode()}")
            conn.sendall(b"Hello from server")

if __name__ == "__main__":
    start_server()
# 客户端 client.py
import socket

def start_client(host='127.0.0.1', port=65432):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        s.sendall(b"Hello from client")
        data = s.recv(1024)
        print(f"收到回复: {data.decode()}")

if __name__ == "__main__":
    start_client()

先运行server.py,再运行client.py,就能看到基本的通信过程。这个例子展示了TCP套接字通信的核心:绑定、监听、连接、发送和接收。

如果你的场景是调用REST API,直接用requests库更简单:

import requests
response = requests.get('https://api.example.com/data')
print(response.json())

对于需要持久连接、双向通信的场景(比如聊天应用),可以考虑WebSocket(用websockets库)。如果是微服务之间需要高性能RPC,gRPC是很好的选择。

总结:根据通信模式选对库。

我还记得 ZeroMQ 里的 4 种消息模式:

1 对 1 PAIR
客户端服务端 REQ-REP
订阅多种消息推送 SUB-PUB
生产者-消费者模式 PUSH-PULL

好像 C++里还有 route 模式
http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/patterns.html




谢谢两位的建议,思路开阔了很多。第一次了解到 ZeroMQ 感觉值得深入研究一下

之前写的远程调用,linux 运行 client 将写好的代码发送到 win 的 server,编译好后再返回到 linux 上。
Server.py
https://gist.github.com/anonymous/063f0e39a8f974946a05ed3e7d6e8b6e

Client.py
https://gist.github.com/anonymous/7f3f4c10a01a5694ff8bb4dd94341c0a

方法虽然古老,最少够小够轻,python 自带都不用再额外装库就能稳定工作了

mq 或者 celery 感觉都可以

回到顶部