首页 新闻 会员 周边

在C#为主要语言的项目中,是否有必要集成Python语言?

-1
悬赏园豆:30 [已解决问题] 解决于 2017-10-05 14:51

    公司最近来了一批学生参与到项目中,负责部分文件内部的解析工作,并负责开发解析模块,但是都是搞Python的(所谓解析工作,就是把现成的数据,按照一定的标准重新组合成数据库(sqlite)),会.net的只有一个,而且还不怎么懂,现在公司希望让我把他们的Python代码拿来用,封装,并集成到UI上,但是我知道这个相互调用的成本很高,完全不太想用Python了,之前就有两个已经集成的解析模块是用Python写的,是调用的Python.exe命令行做的,调起来效率非常慢,出了问题还要找对应的开发去解决,后面针对不同类别的解析越来越多,我不想在他们写的代码出现了问题的情况下,去逐个去找他们修改,那样我的工作量是不人道的(只有我一个负责封装和UI:( ),而且我也只是一个还没有毕业的新手,对于架构没有什么经验,对于项目中已经确定使用的两种语言c#+c,好在有功能完备的P/Invoke平台调用可以比较方便的实现内存级别的交互,但是Python我就实在无能为力了,网上的一些C#调用Python Demo都是一些hello world级别的代码,对于比较具有深度的互调用,比如Stream级别的交互,成本就很高了,所以各位大神有什么好的经验能够传授给我解决Python和C#之间的内存级别调用,或者说我是不是应该冒死请求上边,让所有的解析模块用C#实现呢?或者说我是不是该找下家呢?

.NetDomainer的主页 .NetDomainer | 菜鸟二级 | 园豆:336
提问于:2017-10-02 16:57
< >
分享
最佳答案
2

这种事情别人很难给准确的建议的,毕竟如何选择可能和你的前途有关。

1、你们公司不可能让一群学生写完Python,以后没人擦屁股吧?总得有人能维护,学生写的反正我是不敢用的。

2、跨语言的成本,要看情况而定,一般来说,初学者当然最好不要跨语言,进阶者也要尽量避免。

3、公司就让你一个刚刚毕业的新手负责?没有技术领导?

4、Python的优势在哪儿?是否不可替代?替代成本如何?

收获园豆:20
爱编程的大叔 | 高人七级 |园豆:30839 | 2017-10-03 09:17

感谢你的耐心回答,关于你提的几点:

1.我们公司不是一个完全的IT公司,老板只是对于这个行业比较了解,对于相关软件的使用比较透彻,现在自己出来单独创业,对于开发是不清楚的,那些学生是别的学校刚好推荐过来实习,老板就让他们负责部分解析工作,但是都是Python的,又觉得这些资源是可以利用的,至于会不会保留这些人他自己都不清楚。

2.从我的经验来看,如果是C的话倒还好说,我们公司有一个高手就是用C的,然后写成dll让我调,因为这部分代码不是很多,而且得益于.net比较完备的平台调用机制可以实现非托管内存的交互,成本不高。但是Python我真的是没有好办法来像C这样很方便的调,也许是我孤陋寡闻,能力不行吧。

3.之前我说过老板不懂代码,产品的开发都是老板提一个需求,然后上面提到的那个高人他来把美工的设计给我,根据需求让我实现,因为他不懂C#,于是表现层,中间层的代码的实现结构,各个模块的封装都是我自己设计的,我不知道正规的开发流程是不是这样,我只是一个还没有毕业的菜鸟。

4.对于本项目而言,解析工作都是一些CRUD操作,Python相对于C#,并没有特别的优势(我也是写过一些Python的)。

.NetDomainer | 园豆:336 (菜鸟二级) | 2017-10-03 21:44
其他回答(3)
2

ironpython不行么

收获园豆:5
Daniel Cai | 园豆:10424 (专家六级) | 2017-10-02 19:08

这边不是简单的调用Python,那边如果需要原始数据还要回调我这边的接口(Stream,不是普通的现有的FileStream等,而是经过抽象处理的自定义Stream),那样的话那边肯定他们要引入.net的相关库,暂且不论那边是不是愿意学习IronPython这一套,但是这样绝对会比单纯用C#成本高,反而还不如全部用C#,这样更容易调试和管理。

支持(0) 反对(0) .NetDomainer | 园豆:336 (菜鸟二级) | 2017-10-03 20:41
2

要么都用python,要么都用C#

收获园豆:5
ycyzharry | 园豆:25653 (高人七级) | 2017-10-03 19:54

我也是这么觉得的。

支持(0) 反对(0) .NetDomainer | 园豆:336 (菜鸟二级) | 2017-10-03 21:46
1

可以考虑restful api ,一来解耦两个系统,二来便于以后维护,三便于微服务扩展。

蝌蝌 | 园豆:158 (初学一级) | 2017-10-04 06:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册