4. 写pyx文件

pyx文件是python的c扩展文件,代码要符合cython的规范,用什么编辑器写都行。我在eric4上写的,结果它默认用python解释器来进行解释,还提示有bug,“语法错误”。不理会他,本来cython的语法在python里面就不支持。创建TestOMP.pyx文件,并在文件中写代码如下:

TestOMP.pyx

from cython.parallel import prange, parallel, threadid
from libc.stdio cimport printfdef Test():cdef int i = 0cdef int sum = 0for i in prange(1000000, num_threads=2, nogil=True):  printf ("%d\n", i)

第一句引入了cython中的并行处理模块,尤其是prange。我理解,prange就是“python 'range' of parallel version”,就是并行循环。第二句是引入了c语言中的‘printf’函数。整个文件就定义了一个Test函数。看到,每个变量在使用前都要声明类型。在prange中,有参数‘num_threads’来设定并发数量。nogil表示‘no gil(Global Interpreter Lock)’,想要获得并行,这个参数就要设置。在循环过程中,调用了c的库函数printf,来打印每个整数值。

5. 写setup.py文件

pyx文件是python的c扩展文件,代码要符合cython的规范,用什么编辑器写都行。我在eric4上写的,结果它默认用python解释器来进行解释,还提示有bug,“语法错误”。

上面的pyx文件还仅仅是源代码文件,要想被python调用、要想运行,仅仅写了源代码还是不够的。具体来说,还要转成.c或者.c++的文件,并且再进一步转成.pyd文件。pyd文件才是可以直接使用的文件。为了达到上述目的,就要写一个setup.py脚本,如下:

setup.py

#!/usr/bin/python
#python version: 2.7.3
#Filename: SetupTestOMP.py  # Run as:
#    python setup.py build_ext --inplace    import sys
sys.path.insert(0, "..")    from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext  # ext_module = cythonize("TestOMP.pyx")
ext_module = Extension(  "TestOMP",  ["TestOMP.pyx"],  extra_compile_args=["/openmp"],  extra_link_args=["/openmp"],  )  setup(  cmdclass = {'build_ext': build_ext},  ext_modules = [ext_module],
)  

这个完全是一个python脚本,可以在python解释器下面运行。在控制台下,运行如下命令‘python setup.py build_ext --inplace’,就生成了TestOMP.pyd文件。

当然,同时还有一些杂七杂八的文件,如‘build’目录下面的‘lib’文件。这都提示着,这是在windows vistual studio环境下。在linux+gcc环境下,就要生成.so文件了,而且“/openmp”的选项就要写成“-fopenmp”

当然,这里的可以回遇到这样的问题:

Traceback (most recent call last):
File "setup.py", line 13, in <module>
from Cython.Build import cythonize
ImportError: No module named 'Cython'

可以执行pip进行安装:pip install Cython

6.写TestOMP.py

文件上述两个步骤,相当于把某个python效率瓶颈模块(这之前需要用profile工具来定位)用效率更高的代码写成了python的c扩展形式,接下来,就是要在python代码中调用他们。TestOMP.py就是这个调用的脚本,如下:

from TestOMP import Test
Test()  转载:https://www.cnblogs.com/nucdy/p/7736155.html

python---之cython的使用相关推荐

  1. Python、Cython、CPython的简单对比

    最近看到NLP领域一个预处理工具库spaCy,它基于Cython语言实现,因此具有较高的处理效率,遂对Cython进行了简单的调研,记录一下方便回看. 简单地说,Cython的出现解决了Python运 ...

  2. c语言指针生成numpy数组,python – 在cython中声明numpy数组和c指针

    在我的代码中,我通常使用numpy数组来连接方法和类.优化我的程序的核心部分我使用cython与那些numpy数组的c指针.不幸的是,我目前正在声明阵列的方式很长. 例如,假设我有一个方法应该返回一个 ...

  3. python数组内运算_有效的数学运算在Python中用cython进行小数组运算

    你可以使用基本功能滚动你自己的简单,这里的检查是一个模型开始: from libc.stdlib cimport malloc,free cpdef class SimpleArray: cdef d ...

  4. 将python编程为c_使用Cython为Python编写更快的C扩展

    在我们这个包含了 7 个 PyPI 库的系列文章中学习解决常见的 Python 问题的方法. Python 是当今使用最多的流行编程语言之一,因为:它是开源的,它有广泛的用途(例如 Web 编程.业务 ...

  5. python调用c++_python高性能编程之Cython篇 第一章

    第一节 cython的潜能 •Cython是一种编程语言,它将Python与C和C ++的静态类型系统相结合. •Cython是一个将Cython源代码转换为高效的C或C ++源代码的编译器.然后可以 ...

  6. 【深度好文】python加速库cython简介

    1. Cython是什么? Cython是让Python脚本支持C语言扩展的编译器,Cython能够将Python+C混合编码的.pyx脚本转换为C代码,主要用于优化Python脚本性能或Python ...

  7. 什么是Cython?让Python有C语言的速度

    Python的一个超集,可以编译为C,Cython结合了Python的易用性和原生代码的速度. Python作为最方便,丰富的配置和彻底有用的编程语言之一而享有盛誉. 但执行速度?没那么快. 让我们开 ...

  8. 在Python中调用C/C++:cython及pybind11

    在Python中调用C/C++:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的 ...

  9. Cython与pyx pyd格式-python调用c++

    1.python与C++为何要结合 当从事技术的人员提到 Python 的时候,经常会说到下面两个优点: 易于上手 开发方便,开源库触手可及 然而实际上,第一点是以巨慢的执行速度为代价的,这个时候有志 ...

  10. python 三分钟入门_Cython 三分钟入门教程

    作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...

最新文章

  1. 揭开知识库问答KB-QA的面纱2·语义解析篇
  2. mysql自动增长id 溢出_MySQL表自增id溢出的故障复盘怎么解决 MySQL表自增id溢出的故障复盘解决方法...
  3. #1403 : 后缀数组一·重复旋律 (可重叠最长重复K次子串问题)
  4. 使用HANA studio创建XS project
  5. JUNOS Olive GRE Tunnel Configuration
  6. Android平滑移动——Scroller类研究
  7. java elasticsearch_在Spring java框架中使用ElasticSearch的最佳方式
  8. 评审系统:查看互评信息实现及优化显示
  9. Linux-Input入门-一次愉快的源码分析
  10. 校园客户端linux创翼,电信创翼校园客户端-电信创翼校园网客户端下载 4.7.9.589 官方版 - 河东下载站...
  11. i2c驱动之at24c08(1)
  12. 压缩文件的格式zip和rar有什么区别?
  13. CardView的基本使用
  14. 大小和尚共有100人php,古今诗趣(一)· 数字诗
  15. win10笔记本电脑键盘没反应是哪个键锁了
  16. 9.3.2另一种计算机器2
  17. 就业协议书中的服务器是什么,就业协议书是什么?它有什么作用?
  18. 宁波诺丁汉大学计算机学院官网,宁波诺丁汉大学电子通讯及计算机工程(含实习)硕士课程...
  19. 在react怎样引入jQuery
  20. VOIP信号传输过程

热门文章

  1. 学术论文投稿与Rebuttal经验分享
  2. tableau连接不上oracle,Oracle
  3. Linux命令-程序启动
  4. MySQL数据库教程之七:MySQL编程基础
  5. In download.file(sprintf(“https://ftp.ncbi.nlm.nih.gov/geo/series/%s/%s/matrix/%s“, : InternetOpen
  6. JNU-数电实验一-初识Multisim和Basys3
  7. 数据仓库、数据集市和数据湖有什么区别?
  8. 严蔚敏数据结构c++版微盘_数据结构复习知识点总结
  9. 创建基础 protractor 项目
  10. Omnipeek空口抓包(4):抓取路由器下的无线网络包