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创建XML文档
Mar 01 Python
python从ftp下载数据保存实例
Nov 20 Python
python动态加载变量示例分享
Feb 17 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
Python 自动化表单提交实例代码
Jun 08 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
python自然语言处理之字典树知识总结
Apr 25 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
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python实现屏保计时器的示例代码
2018/08/08 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
python scipy卷积运算的实现方法
2019/09/16 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
python 绘制国旗的示例
2020/09/27 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
兼职学生的自我评价
2013/11/24 职场文书
采购内勤岗位职责
2013/12/10 职场文书
教师实习自我鉴定
2013/12/14 职场文书
经理秘书找工作求职信
2013/12/19 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
党员个人公开承诺书
2014/08/29 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
python的变量和简单数字类型详解
2021/09/15 Python