在单独的过程中运行bmi实现,并将其公开为带有grpc的bmi python

grpc4bmi的Python项目详细描述


[![DOI](https://zenodo.org/badge/130237165.svg)(https://zenodo.org/badge/latestdoi/130237165)


\purpose


此软件允许您在服务器进程中包装BMI实现(https://github.com/csdms/bmi),并通过包含的Python与之通信客户端。GRPC(https://grpc.io/)将通信序列化到协议缓冲区,并通过网络端口进行。

如果您的服务器模型是用python实现的,那么在服务器环境(例如docker container)中也要这样做。如果模型是在r中实现的,则在服务器环境中运行
``bash
pip install grpc4bmi[r]
```
。对于来自GITHUB的出血边缘版本,使用GIT+HTTPS://GITHUB.COM/EWELDROCK/GRPC4BMI。GITOSYBEG= GRPC4BMI < BR/> ` BR/>最后,如果该模型是在C或C++中实现的,克隆此Git RePO并运行
"BASH
make;make安装
"
在CPP文件夹中。
BR/>用法

\python编写的模型
要获得灵感,请查看测试目录中的示例。要启动允许调用bmi实现的服务器进程,请键入
``bash
运行bmi server--name<;package>;<;module>;<;class>;--port<;port>;--path<;path>;
````
其中````<;package>;<;module>;```是包含您的实现的python包和模块,```<;class>;``是您的
bmi模型类名,````<;port>;``是主机系统上的任何可用端口,可选的```<;path>;``表示应该添加到系统路径中以使你的执行工作。上面的name选项是可选的,如果没有提供,脚本将查看环境变量``bmi`u package````````bmi`u module``和
``bmi`u class```。类似地,端口可以由环境变量‘BmiyPalt’`.Br/>定义,假设软件的实现构造函数没有参数。您可以复制文件并替换函数
'C++BR/> BMI * CuraTyMyMySuthAuthand()
{
/*在此返回您的新BMI实例指针…*/
}
```
与模型bmi的实例化。该模型需要实现C的CSDMS BMI,但是您也可以实现我们更面向对象的C++接口[BMICPUpFest](http://Github.com/eWryCys/GrPC4BMI/BLB/MST/CPP/BMIY-CPPP.Ext.h).Br/> Br/>模型,在R
中编写,GRPC4BMI Python包也可以运行BMI模型。如果模型是[AbstractBMI]的子类,则用R编写(https://github.com/ewatercycle/bmi-r/blob/master/r/abstract bmi.r l9)
有关R和Docker的说明,请参阅https://github.com/ewatercycle/bmi-r。

bmi model文件>;]--名称[<;包>;:]<;类>;--端口<;端口>;
```

例如使用[海象](https://github.com/ewatercycle/grpc4bmi-examples/tree/master/walrus)使用
``bash
运行bmi server--lang r--path~/git/ewatercycle/grpc4bmi examples/walrus/walrus bmi.r--name walrusbmi--port 50051
```

客户端只有一个python实现。默认的bmi客户端假定在给定端口上有一个正在运行的服务器进程。
``python
from grpc4bmi.bmi_grpc_client import bmiclient
mymodel=bmiclient(grpc.unsecure_channel("localhost:<;port>;")
print mymodel.get_component_name()
mymodel.initialize(<;filepath>;)
…进一步的bmi调用…
```

包还包含拥有服务器进程的客户端实现,可以是python子进程,也可以是运行``run-bmi-s的docker映像服务器```脚本。例如,
``python
from grpc4bmi.bmi_client嫒u subcomm import bmiclientsubprocess
mymodel=bmiclientsubprocess(<;package>;<;module>;<;class>;)
`````
将在子进程中自动启动服务器,而
``python
from grpc4bmi.bmi嫒u client嫒u subcomm importbmiclientdocker
mymodel=bmiclientdocker(<;image>;,<;port>;)

````
将启动docker容器,假设grpc bmi服务器将启动并公开端口````<;port>;```.

开发:在开发人员更改原始文件时生成GRPC代码,在Python环境中安装GRPC工具Python包是必要的:
'BASH
PIP安装-R要求。如<;https://github.com/google/protobuf/blob/master/src/readme.md>;所述,在此之后,只需执行"proto_gen.sh"脚本就可以完成这项工作。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?