绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Python如何帮助我高效完成工作
2019-12-12 11:20:23

我工作的内容大致分为三种:MCU、DSP嵌入式开发,工控软件开发,控制和信号处理的算法研究。

嵌入式开发

开发嵌入式程序主要是C语言和少量汇编,但是Python也派上了大用处,例如可以用它先模拟算法,设计滤波器,绘图。也可以设计一些调试工具,例如通过串口、CAN通信实时观察芯片内存中的数据,有时候调试比较复杂的东西时,甚至可以用pywinauto自动化界面操作,按照一定逻辑排查错误。在这些工作中,Python起到辅助作用。

工控软件开发

工控软件开发主要是通过一些AD,DA,DIO,电机驱动扩展卡,监控传感器,控制电机,读取并分析数据。这些程序原先是采用VC 6.0编写的,界面设计一直很成问题,一个好的绘图控件都没有。后来我改用C#,提高了一些开发效率,但是C#语法比较麻烦,一段时间不接触就忘记了。后来就改用Python,问题是那些扩展卡都没有Python的演示程序,因此需要自己动手用c*库调用扩展卡的DLL驱动程序。一旦和扩展卡打交道的程序写好之后,剩下的就是Python的强项了。

用PyQt, wx可以很方便地制作界面,界面要求不高时,也可以用TraitsUI。

绘图工具可以用Chaco, Mayavi, matplotlib,如果要求绘图速度比较高的话,可以用guiqwt,这个是对Qt的qwt绘图库的包装,速度要比其它的都快。

如果需要做图像处理,那么OpenCV就派上用场了。

如果需要高效计算的话,一般可以用NumPy解决,解决不了的就用Cython或者SWIG写一个扩展。有时还需要用多进程模块multiprocessing。

数据存储可以用sqlite,如果是大规模的数据,可以用pyTable保存成HDF5格式。

使用Python能够解决绝大部分的工控软件的需求。

算法研究

Python开发快,比较适合研究算法,虽然执行的时候会很慢,不过也可以通过NumPy, Cython或者寻找一些现成的扩展库改善。当算法比较成型时,再用C, C++改写。

曾经有一个模拟项目的动态性比较高,用Python比较容易实现,运行速度虽然尚能接受,但是有时需要进行上百次模拟运行时,就需要等待很长时间了,因此决定用C++重写。而我的C++水平有限,不知道该如何设计,我后采用Python动态输出C++代码,调用C++编译器编译成DLL,然后通过c*动态载入。由于每次根据用户的设置都会生成C++代码,因此使用的C++功能很基础,没有继承,虚函数等东西,我想能大地提高程序的运行速度。终程序的运行速度比Python版本提高了10-20倍(Python版本已经足够优化,使用了NumPy, SciPy的一些高速运算函数,否则纯粹的循环、判断和数值运算的话,C要比Python快几百倍)。

Python的优势

扩展库非常丰富,而且都能看到源代码,源代码有时候比文档更管用。

便携性,我在U盘中安装了一个portablepython,并将所有会用上的扩展库都放进去了,这样无论到哪台机器上,都能运行我的Python程序。

Python语法优美,用Python写程序是一种享受。

关于本书的编写

这本书的编写历时近3年,是我在工作中自学的一个总结,因此成书时间拖得比较久。如果真要写的话,书中介绍的每个扩展库都可以写出一本书来,因此这本书只能起到入门、打基础的作用。读者可了解到足够多的库,但是具体到实际工作中的某个问题时,还需要您自行查找文档,甚至分析库的源程序。在解决问题的同时所学习到的才是有用、牢固的。

也许您会怀疑花许多时间学习一门新的语言,以及那么多不太出名、甚至文档都不全的扩展库是否值得。那么你可以看看我的经验:我在工作中一边自学一边用来做实际的项目,这几年下来我感觉我的开发效率比用C#时高出3-4倍,比用VC时高出7-8倍。而我获得的回报就是,每天都能不用加班,并且写出了这本书,更重要的是,我还有更多的时间陪伴家人了。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

星说
创建时间:2019-11-28 12:45:43
作为炎黄子孙,我们有很多知识渊博的祖人,这个祖人指的是在各领域登峰造极的学者论说,我们跟随强大基因的路线,学习,深化自己的知识体系,优化环境。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • unnamed persona
    栈主

小栈成员

查看更多
  • 外星人6
  • supergirlxu
  • unnamed person1
  • daxuesheng
戳我,来吐槽~