作家
登录

使用Python提供高性能计算服务

作者: 来源: 2017-05-25 13:02:26 阅读 我要评论

 

媒介


python具有丰富的看维并且很轻易作为胶水说话很轻易与c/c++进行交互集成。

在script目次下履行run_single.sh,即

是以为了适应快速变更的营业和兼顾枷⒚效力,在上层采取python作为server供给service,在底层采取c/c++进行计算是一种对于算法开辟者异常合适的方法。

python flask库供给http接口以及相干demo页面,gunicorn供给多核并行才能,底层c++库供给单线程上的计算。

下面经由过程一个例子解释这种架构。代码地址:python_hps

预备

在实验开端之前,须要安装flask、gunicorn、apach bench tool等对象。

注:所有实验均在linux体系中进行。测试机械为4核虚拟机。

  1. sudo pip install flask 
  2. sudo pip install gunicorn 
  3. sudo apt-get install apache2-utils 

计算

计算部分模仿真实计算,是以计算量比较大年夜,在我测试的虚拟机上单核单线程跑400ms阁下。

c++核心计算部分,随便写的:

  1. API_DESC int foo(const int val) 
  2.     float result = 0.0f; 
  3.     for(int c=0;c<1000;c++) 
  4.     { 
  5.         for(int i=0;i<val;i++) 
  6.         { 
  7.             result += (i); 
  8.             result += sqrt((float)(i*i)); 
  9.             result += pow((float)(i*i*i),0.1f); 
  10.         } 
  11.     } 
  12.     return (int)result; 

python wrapper,采取ctypes:

  1. #python wrapper of libfoo 
  2. class FooWrapper: 
  3.     def __init__(self): 
  4.         cur_path = os.path.abspath(os.path.dirname(__file__)) 
  5.         self.module = ctypes.CDLL(os.path.join(cur_path,'./impl/libfoo.so')) 
  6.     def foo(self,val):     
  7.         self.module.foo.argtypes = (ctypes.c_int,) 
  8.         self.module.foo.restype = ctypes.c_int 
  9.         result = self.module.foo(val) 
  10.         return result 

flask http API:

  1. @app.route('/api/foo',methods=['GET','POST']) 
  2. def handle_api_foo(): 
  3.     #get input 
  4.     val = flask.request.json['val'

      推荐阅读

      如何理解5G空口(NR)?

    电信行业肯定欲望在超高容量和低延迟的下一代收集的支撑下安排5G营业,然则在5G商用之前,该技巧须要做进一步>>>详细阅读


    本文标题:使用Python提供高性能计算服务

    地址:http://www.17bianji.com/lsqh/35421.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)