a***c 发帖数: 1 | 1 用statsmodels, sklearn,pandas做的一堆程序怎么写成c++或者golang程序?搜了一
下好像这两个语言没什么能用的统计库啊。gsl凑合有一点点非常基本的,golang只有
github上有一些也不全。 | r****t 发帖数: 10904 | | w***g 发帖数: 5958 | 3 别想了, 这个不值得做的. 你的路子是看看python程序哪儿还有瓶颈,
然后如果python优化不上去的话用C++写个模块加速下. 我见人用numba,
自己没用过.
你说的这三个, C++根本没戏.
【在 a***c 的大作中提到】 : 用statsmodels, sklearn,pandas做的一堆程序怎么写成c++或者golang程序?搜了一 : 下好像这两个语言没什么能用的统计库啊。gsl凑合有一点点非常基本的,golang只有 : github上有一些也不全。
| a***c 发帖数: 1 | 4 麻烦是server是用golang写的,怎么在golang里叫python程序,开一个subprocess吗,
还是俩独立进程socket通信,怎么把算出来的daraframe数据传回给给golang? | g****t 发帖数: 31659 | 5 Python的性能优化这几年没有进步。我查过去年pyconf 2018有个talk,讲的东西和2015
年没区别。
: 别想了, 这个不值得做的. 你的路子是看看python程序哪儿还有瓶颈,
: 然后如果python优化不上去的话用C 写个模块加速下. 我见人用numba,
: 自己没用过.
: 你说的这三个, C 根本没戏.
【在 w***g 的大作中提到】 : 别想了, 这个不值得做的. 你的路子是看看python程序哪儿还有瓶颈, : 然后如果python优化不上去的话用C++写个模块加速下. 我见人用numba, : 自己没用过. : 你说的这三个, C++根本没戏.
| w***g 发帖数: 5958 | 6 这个是比较恶心.
如果不计较性能还是可以搞的.
1. go可以调c/c++, c/c++可以调embedded python. 所以再不济, 通过c转一转还是可
以弄出来的. 用C/C++包装的好处是C/C++和go的接口可以完全不涉及到dataframe或者
numpy array.
go直接调python, 按这个可能更方便
https://www.datadoghq.com/blog/engineering/cgo-and-python/#embedding-cpython
-a-primer
但是go只接调python, 如果没有比较好的第三方库支持, dataframe和numpy array
可能会搞不定.
2. 说来说去, python好的地方和不好的地方, 就是python是全局的.
你没法给每一个线程起一个单独的python解释器. 所以如果是直接embed集成的,
任凭你go怎么优化, 最后到python还是单线程. 在go里对应模型要加锁, 一次
只能有一个线程/goroutine在访问.
3. 你也没亏到底. 毕竟一旦到numpy, 还是能用多核的, 就是效率不是最好.
这个是我建议的套路. 只要python程序稳定, 容易实现, 架构简单不容易出错.
如果非要上多核, 那就只能上多进程了.
如果没有限制, 还是会按上面的套路做. 一个go进程对应一个python解释器.
然后限制每个进程只用一个核. 然后起多个go进程. "每个进程限制一个核"
这事情可能不一定能做到. OpenMP是OMP_NUM_THREADS控制, 但是谁知道
python乱七八糟的库都是怎么弄的. 如果起多进程, 每个进程的python又试图
占据多核, 进程间就会打架可能还会死锁. 然后就说不清了.
subprocess在编程上是比较难处理的. 如果你就是embed python, crash了
go服务器也crash, 重启就可以了. subprocess的话, python进程crash,
你的go服务器还要负责擦屁股重启子进程, 一不小心还会出现zombie进程.
我一般不会上这条路.
【在 a***c 的大作中提到】 : 麻烦是server是用golang写的,怎么在golang里叫python程序,开一个subprocess吗, : 还是俩独立进程socket通信,怎么把算出来的daraframe数据传回给给golang?
| a***c 发帖数: 1 | 7 谢wdong老师指点,我看看这个go-python能搞定不。但是这个库好像只能py2,难道还
要把py3转成py2。。。
本来想着把Python部分重写,看来不行。如果server用C++重写,boost python接口,
是不是也有上面说的golang一样的问题?或者做一个单独模块,用Flask管理python部
分,websocket通信,两个模块独立运行可行吗。
cpython
【在 w***g 的大作中提到】 : 这个是比较恶心. : 如果不计较性能还是可以搞的. : 1. go可以调c/c++, c/c++可以调embedded python. 所以再不济, 通过c转一转还是可 : 以弄出来的. 用C/C++包装的好处是C/C++和go的接口可以完全不涉及到dataframe或者 : numpy array. : go直接调python, 按这个可能更方便 : https://www.datadoghq.com/blog/engineering/cgo-and-python/#embedding-cpython : -a-primer : 但是go只接调python, 如果没有比较好的第三方库支持, dataframe和numpy array : 可能会搞不定.
| a***c 发帖数: 1 | 8 最近为了这个玩意儿开始学golang,这些go的库文档质量感觉不咋地啊,在godoc上自
动生成一个index就完 | w***g 发帖数: 5958 | 9 你提醒我了,其实你flask直接对外提供服务就可以了。go都不需要。
用go或者C++做服务器,无非是追求性能。如果瓶颈是在模型上,服务器用啥
根本无所谓。你可以用flask写服务器, 然后stress test,用perf record
和perf report看看, 服务器那块是不是瓶颈。
下面是原来写的,你随便看看。
-----------------------------
我还是建议 python - C/C++ - go这条路。因为你找第三方go-python库,numpy啥的未
必支持。
你说的对,C++连python,同样有多进程的问题。这个是python的死穴(同时也是
python极大的优势,如果没这个,python未必能流行起来)。
如果你go没啥根基, 建议还不如砸时间到C++上。C++再战10年没啥问题。
go比较适合轻量级服务。你这后台一上pandas/numpy,怎么也清凉不起来了。
【在 a***c 的大作中提到】 : 谢wdong老师指点,我看看这个go-python能搞定不。但是这个库好像只能py2,难道还 : 要把py3转成py2。。。 : 本来想着把Python部分重写,看来不行。如果server用C++重写,boost python接口, : 是不是也有上面说的golang一样的问题?或者做一个单独模块,用Flask管理python部 : 分,websocket通信,两个模块独立运行可行吗。 : : cpython
| s*********y 发帖数: 6151 | 10 你这个问题其实是典型的decoupling问题
建议把运算单独打包成一个服务 参见micro service的基本思想 | R******e 发帖数: 623 | 11 不是很多很复杂的话,直接上Grumpy,再检查修改一下就是了。
【在 a***c 的大作中提到】 : 用statsmodels, sklearn,pandas做的一堆程序怎么写成c++或者golang程序?搜了一 : 下好像这两个语言没什么能用的统计库啊。gsl凑合有一点点非常基本的,golang只有 : github上有一些也不全。
| x****u 发帖数: 44466 | 12 水木社区有人嫌numpy慢,2万rmb高价求兼职用C++重写
了一
只有
【在 w***g 的大作中提到】 : 别想了, 这个不值得做的. 你的路子是看看python程序哪儿还有瓶颈, : 然后如果python优化不上去的话用C++写个模块加速下. 我见人用numba, : 自己没用过. : 你说的这三个, C++根本没戏.
| x****u 发帖数: 44466 | 13 换windows吧,python只要加几个decorator就变成了dcom server
创建的时候系统首先会尝试运行中实例,找不到才会新建
当年深度学习库不稳定,用这玩意10%的崩溃率也不怕
cpython
【在 w***g 的大作中提到】 : 这个是比较恶心. : 如果不计较性能还是可以搞的. : 1. go可以调c/c++, c/c++可以调embedded python. 所以再不济, 通过c转一转还是可 : 以弄出来的. 用C/C++包装的好处是C/C++和go的接口可以完全不涉及到dataframe或者 : numpy array. : go直接调python, 按这个可能更方便 : https://www.datadoghq.com/blog/engineering/cgo-and-python/#embedding-cpython : -a-primer : 但是go只接调python, 如果没有比较好的第三方库支持, dataframe和numpy array : 可能会搞不定.
|
|