ERLANG和PYTHON互通实现过程详解


Posted in Python onJuly 05, 2019

最近开发 Erlang ,对其字符串处理能力无言至极,于是决定把它和python联合起来,打造一个强力的分布式系统,等将来需要系统级开发时,我再把 C++/C组合进来.

首先参考了 Erlang 官方文档和 http://blog.developers.api.sina.com.cn/?tag=erlang 以及 http://kazmier.net/computer/port-howto/ .

研读了将近24个小时, 才终于完全把问题解决. 起名为town,town在英文里表示集市,也就是代表各种语言在这里的交流与互动。) )

-module(town).
-behaviour(gen_server).
 
%% API
-export([start/0,combine/1]).
 
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-record(state, {port}).
 
start() ->
 gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).
stop() ->
 gen_server:cast(?SERVER, stop).
init([]) ->
 process_flag(trap_exit, true),
 Port = open_port({spawn, "python -u /home/freefis/Desktop/town.py"},[stream,{line, 1024}]),
 {ok, #state{port = Port}}.
 
handle_call({combine,String}, _From, #state{port = Port} = State) ->
 port_command(Port,String),
 receive
 {Port,{data,{_Flag,Data}}} ->
  io:format("receiving:~p~n",[Data]),
  sleep(2000),
  {reply, Data, Port}
 end.
handle_cast(stop, State) ->
 {stop, normal, State};
handle_cast(_Msg, State) ->
 {noreply, State}.
 
handle_info(Info, State) ->
 {noreply,State}.
 
terminate(_Reason, Port) ->
 ok.
 
code_change(_OldVsn, State, _Extra) ->
 {ok, State}.
 
%%--------------------------------------------------------------------
%%% Internal ---------------------------------------------------------
combine(_String) ->
 start(),
 String = list_to_binary("combine|"++_String++"\n"),
 gen_server:call(?SERVER,{combine,String},infinity),
 stop().

这段是Python的脚本 当erlang中town:combine(“sentence1+sentence2”)执行时,会在后台启动python的脚本,处理完毕后返回给Erlang结果:sentence1sentence2,然后退出。

import sys
def handle(_string):
 if _string.startswith("combine|"):
  string = "".join( _string[8:].split(","))
  return string
 
"""waiting for input """
while 1:
 # Recv. Binary Stream as Standard IN
 _stream = sys.stdin.readline()
 
if not _stream: break
 # Scheme, Turn into Formal String
 inString = _stream.strip("\r\n")
 # handle String
 outString = handle(inString)
 # send to port as Standart OUT
 sys.stdout.write("%s\n" % (outString,))
 sys.exit(0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
python中的set实现不重复的排序原理
Jan 24 Python
python 2.7.14安装图文教程
Apr 08 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python绘制BA无标度网络示例代码
Nov 21 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
python爬虫中的url下载器用法详解
Nov 30 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
python如何读取bin文件并下发串口
Jul 05 #Python
anaconda如何查看并管理python环境
Jul 05 #Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 #Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 #Python
python调用并链接MATLAB脚本详解
Jul 05 #Python
python实现最大子序和(分治+动态规划)
Jul 05 #Python
Python实现最大子序和的方法示例
Jul 05 #Python
You might like
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
python批量修改文件名的实现代码
2014/09/01 Python
Python中函数的用法实例教程
2014/09/08 Python
简单介绍Python中的JSON使用
2015/04/28 Python
python实现扫描ip地址的小程序
2019/04/16 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
护士专业推荐信
2013/11/02 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
中秋节礼品促销方案
2014/02/02 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
教师求职自荐信
2014/03/09 职场文书
市场营销专业求职信
2014/06/17 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
学校重阳节活动总结
2015/03/24 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
python 中的jieba分词库
2021/11/23 Python