写C#的前同事竟突然找我咨询python问题,他不写C#了?
moboyou 2025-06-02 18:10 15 浏览
引言
之前已经离职写 C# 的同事今天突然来找我,问我python的问题:
聊天记录截图
一开始以为他改行写python了,原来是他们不再用 matlab ,想通过python的 scipy 库来实现一些算法。
其实都知道python的胶水特性,但真正调用的时候确实会有这样那样的问题。
那怎么办呢?
其实除了直接使用代码调用,更合适的方式其实就是把 python 程序变成一个 中间件,将任务丢给 python 程序,等 结果 计算完成后,再扔回去。
1、RPC是什么
我们将使用 RPC 来实现 中间件,它的全称是 “Remote Procedure Call Protocol”,意思是 远程过程调用。
具体是什么呢?它就像是 云函数,它能够让一个程序像调用本地函数一般,通过网络去调用另一个程序的函数。
虽说是通过网络的,那如果部署在同一台电脑上,那就相当于 一个进程调用另一个进程 般丝滑。
2、RPC使用
我们将使用谷歌的 grpc,它支持主流编程语言,且是跨平台的。
2.1 安装库
pip install grpcio grpcio-tools
2.2 定义服务
创建一个 Test.proto 文件,需要在这个文件中定义我们的公开服务。
Test.proto
syntax = "proto3";
message AddRequest {
repeated float x = 1;
int32 y = 2;
}
message AddResponse {
int32 result = 1;
}
service Calculator {
rpc Add (AddRequest) returns (AddResponse) {}
}
我们设定了一个 Add 的服务,里面参数是 x和y,其中 x对应的是一个浮点数的列表,y是一个整型,返回值也是一个 整型。
这里为了测试多个数据类型,使用了两种参数,只是为了演示设置的。
2.3 生成服务代码
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. Test.proto
运行后,将生成两个文件:Test_pb2.py和Test_pb2_grpc.py。
.py文件
2.4 创建服务代码
现在我们创建一个 TestService.py 来实现服务。
TestService.py
# -*- coding: utf-8 -*-
from concurrent import futures
import grpc
import Test_pb2_grpc
import Test_pb2
import time
class TestService(Test_pb2_grpc.CalculatorServicer):
def Add(self, x, y):
print(x)
print(y)
return Test_pb2.AddResponse(result=100)
def run():
# 设置接收最大为1g
server_option = [('grpc.max_receive_message_length', 1 * 1024 * 1024 * 1024)]
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10), options=server_option)
Test_pb2_grpc.add_CalculatorServicer_to_server(TestService(), server)
port = 8245
server.add_insecure_port(f'[::]:{port}')
server.start()
print('服务启动')
try:
while True:
print('进入循环')
time.sleep(60)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
run()
我们启动了一个端口为 8245 的服务,只打印了 x和y的值,返回了 100。
2.5 测试服务
我们编写一个 TestClient.py 来测试服务。
TestClient.py
import grpc
import Test_pb2_grpc
import Test_pb2
def test_run():
conn = grpc.insecure_channel('localhost:8245')
client = Test_pb2_grpc.CalculatorStub(channel=conn)
request = Test_pb2.AddRequest(
x=[1.1, 1.2, 1.3],
y=5,
)
response = client.Add(request)
print(response)
if __name__ == '__main__':
test_run()
我们使用 python 来测试服务,当然如果你有其他语言的程序,可以使用相应语言程序的 grpc 测试服务。
2.6 查看输出
TestService.py 的输出
x: 1.1
x: 1.2
x: 1.3
y: 5
TestService.py 的输出
x: 1.1
x: 1.2
x: 1.3
y: 5
TestClient.pyd 的输出
result: 100
可以看到,服务获取到了客户端的参数,而客户端得到了服务端的结果。
结尾
现在你已经知道了如何通过 RPC 来实现不同语言与 python 的交互,它能够像使用本地函数一样,调用 python 的实现,可以说非常适合跨语言开发。
相关推荐
- 比尔·盖茨回忆录——《源代码》读后感
-
这本书和我之前看的有关比尔·盖茨的传记明显不同。之前看的有关比尔·盖茨的传记,感觉把很多有关他的特立独行渲染的似乎真命天子一般,好像他干什么都是与众不同,也很少关注他少年时期的朋友交往,内心情感,似乎...
- 微信2022跨年之夜红包封面推出:哔哩哔哩、五月天
-
IT之家12月31日消息,今晚是跨年之夜,微信官方在2022新年送你一款特殊纪念的封面,又一岁荣枯,跨年之夜红包封面陪你过。01哔哩哔哩12月31日晚上11:00开始,打开微信...
- 只需要四步,就能完成PHP搭建(php搭建教程)
-
搭建php的方法主要分为独立安装和集成安装两种,独立安装需要分别下载apache,mysql和php,而集成只需要下载一个软件安装包,比较简单,很适合新手。集成安装包有WampServer、appse...
- 转发五个群就能看完整视频?中招了吗
-
五一亲友聚会,除了久违的见面外个,各种八卦也在亲友间传递,比如“转发五个群就能看完整视频”这个梗,硬是听得小狮子一愣一愣的,于是乎,还真花时间了解了一下……转发五个群就能看完整视频这其实并不是什么新鲜...
- PHP 7.0.2正式版发布:WordPress速度提升3倍!
-
提到PHP,肯定会有人说这是世界上最好的编程语言。单说流行程度,目前全球超过81.7%的服务器后端都采用了PHP语言,它驱动着全球超过2亿多个网站。上月初PHP7正式版发布,迎来自2004年以来最大的...
- 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
-
这段时间一直比较忙,一忙起来真感觉自己就只是一台挣钱的机器了(说的好像能挣到多少钱似的,呵呵);这会儿难得有点儿空闲时间,想把前段时间开发微信公众号支付遇到问题及解决方法跟大家分享下,这些“暗坑”能不...
- php 发送微信订阅消息(php微信推送通知)
-
<?phpnamespaceapp\api\service;useapp\api\exception\ApiException;useapp\api\traits\Singlet...
- 微信支付-JSAPI模式开发(微信支付开发教程)
-
之前写了两篇文章都不是关于技术类的,这个号主要还是以分享技术为主,第三篇必须得上技术类的文章,不然会对不起大家的,所以就有了今天的文章。现在微信支付开发很火,也不是特别难,网上也很多别人整理的教程,也...
- php实现三方支付的方法有哪些?(php实现三方支付的方法有哪些呢)
-
支付模块是各个公司中公司和用户之间的交易桥梁,构建一套易用,安全,便捷的支付环境是每个公司的首要任务。在上一家公司我负责搭建该功能模块,在此对在做支付模块需要准备的资料、遇到的问题和以后规划的设想在这...
- 如何用php实现个人网站支付(如何用php实现个人网站支付密码)
-
支付的必要性现如今电商行业的发展,大部分的网站都需要支付功能,比如商城。公众号,小程序等,但是大部分都需要企业的资质才可以申请。对于很多个人创业者或者开发者来说就不太方便,因为没有相应的公司资质。所以...
- 微信支付配置参数:支付授权目录、回调支付URL
-
一、开通微信支付的首要条件是:认证服务号或政府媒体类认证订阅号(一般认证订阅号无法申请微信支付)二、微信支付分为老版支付和新版支付,除了较早期申请的用户为老版支付,现均为新版微信支付。三、公众平台微信...
- PHP实现微信支付及退款流程实例(php对接微信支付教程)
-
微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可。本篇文章后端使用的是php,侧重于整个支付的流程和一些细节方面的东西。所以使用其他后端...
- PHP开发APP端微信支付(php实现微信支付功能)
-
微信支付很简单,你可以参考微信支付开发文档,一定要仔细阅读开发文档,可以让你少踩点坑;准备工作完成后就是配置参数,调用统一下单接口,支付后异步回调三步。微信开发文档:pay.weixin.qq.com...
- Python入门小游戏之坦克大战,不懂编程都能做出来,附所有源码
-
谁说不懂python就不能用python开发小游戏?这份教程手把手教你用python开发坦克大战小游戏,不懂编程也能学会,只要照着教程做,不仅能做出这个小游戏,还能掌握很多python的基础知识哦。下...
- 程序员python入门课,30分钟学会,30行代码写爬虫项目
-
现在很多人学习编程,最开始就是选择的python,因为python现在比较火,薪资水平在程序员领域也是比较高的,入门快,今天就给大家分享一个用python写的小爬虫项目,只需要30行代码,认真学习,...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- html5和css3新特性 (19)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- 网站管理平台php源码 (19)
- php小说爬取源码 (23)
- github好玩的php项目 (18)
- 云电脑app源码 (22)
- js创建txt文件 (18)