![]() |
1
5
哇,你问了很多问题。让我试着解决他们的问题…
我不知道你的意思。Python在后端工作中被大量使用;如果某些部分被证明是CPU瓶颈,则提取一个稳定的内核并使用C代码(或C++、FORTRAN等,它们都很好地与Python接口)在优化时是一个合理的第一次尝试。 Cython 通常也是一个可行的选择——正如在“最后”的方法中,我们可以深入研究特定于平台的汇编语言,以提取更高的性能(gmp,我介绍的主库) gmpy ,在有保证的情况下会这样做吗-真正好的组装部件实际上是特定于特定的CPU模型的,甚至不是“平台”)。为什么你认为(例如)拥有c or e do特定的程序集来进行全面的CPU优化意味着通用x86程序集“不够好”,或者拥有通用程序集意味着C“不够好”,等等?在(很少但并非闻所未闻的)情况下,压缩每个CPU周期对于它所处理的代码的一小部分来说是非常重要的。 是 重要的是,向下进入一个抽象层次是一个很好的策略,绝不意味着更高层次的抽象“不够好”。 顺便说一句,这就是为什么我把“last”放在吓人的引号中的原因——因为即使是最具体的组件仍然需要更多的优化,人们(对于某些CPU)也可以使用微代码、fpgas或完全定制的IC。当然,这是强调 不 平均软件解决方案 不是 (一次使用正确的动词;-)足够好(满足剩下99.999%的需求):这意味着真正的工程师理解性能权衡…!-)
你在想什么主题,这些主题本身就值得一整本书?我不认为有一本关于(比如)如何和何时选择Python的部分在C中重新编码,C的部分在您选择的平台的通用汇编中重新编码,通用汇编的部分在CPU模型特定的汇编中重新编码,等等到微码,FPGA,定制IC的书有很大的潜在市场——这就是我不投入的动机(比如说)写这样一本书是我生命中的一年。我认为nutshell在概述非常基础的内容方面做得很好——你如何使用profile来挑选那些占用CPU的部分(如果有的话),在python级别对它们进行优化,并在需要的时候用较低级别的语言重新编码(没有提到cython——我上次重写nutshell的时候还没有)。当然,那部分是书的10%,或者更少。
很难打败Ubuntu(虽然我个人使用的主要是Mac,这是因为Mac OS X仍然提供优越的笔记本电脑体验,而我的个人电脑现在大部分都是笔记本电脑——我的工作站,在工作中,运行Ubuntu)——尽管我很肯定其他的现代Linux发行版也会与之并肩作战。我个人的怪癖:我认为对我的(开源)工作至关重要的代码,我总是从零开始,从源代码(python,许多python扩展,gmp,svn,hg,cython)重新构建。我承认,最近我为操作系统本身、GCC套件、x11&friends、gvim做了一个例外——必须划一条线。 一些 哪里有多余的周期 一些 完成了有用的工作;-)。
我觉得没什么大不了的。 有些人对IDES发誓(例如,Eric使用pyqt——或者Eclipse加上pydev);我坚持使用gvim(虽然我偶尔使用i python,但普通的python仍然是我最常用的)。同样,对于SVN和HG等VCS,或者PostgreSQL等DBS,周围也有大量的GUI,但是我发现命令行工具更适合我的个人偏好。 大多数情况下,我建议你选择一个你熟悉的领域(比如,在你的情况下,网络应用),研究并使用它来形成一个支持的观点,一旦你发现它缺少的东西(或者在它的追踪器上打开bug,等等),潜入并开始贡献。如果你在这方面做得很好,你最终会被接受为项目提交者。 关键是挑选你真正的,个人的东西 照顾 关于——不管你是在Ubuntu,Gentoo,或者是在gvim,emacs,eric,等等,这都是一个很小的考虑。 |
![]() |
2
1
开始编码!说真的,创建一些示例应用程序。如果你遇到了痛点,那就是你要学习的地方。当你完成了一个,然后阅读最佳实践书籍,学习如何做得更好。否则你就不学习了,你只不过是在遵循一个食谱而已。 |
![]() |
3
0
阅读大量代码。开发自己的编码风格,但要处理很多项目,以便: a)你的风格可以继承他们最好的部分 b)你不会养成习惯,总是按照你第一次学到的方式做事(因为python在不断地变化,所以“best”成语有一个转换的习惯。 问很多问题,祝你好运!! |
![]() |
4
0
编写C代码而不是Python有两个主要原因:速度和粘合。 Python比C慢得多。大多数情况下,这一点都不重要,但有时确实如此。如果您要用纯Python编写一个傅立叶变换函数,您将不会对速度感到满意;所以scipy的家伙提供了一个傅立叶变换的C实现,您可以从Python调用它。 但是,除非您知道您正在处理一些非常复杂的事情,例如编码压缩视频或傅立叶变换,否则您应该从用Python编写开始。很多时候它会跑得足够快。如果是这样,你就完了! 如果你编写了你的python原型,它看起来工作正常,但是速度很慢,你可以把它作为免费软件发布。慢的解决方案总比没有解决方案好,人们可能会为此感谢你。但是如果你有动力,你可以将你的python重新编码成c来加速它。( 措施 首先是您的python,这样您就知道哪些部分需要加速了。)另外,作为一个额外的好处,您已经正确地实现了算法一次(在python中),所以您对如何在c中处理这个问题有了一些好的了解。 为python编写C模块的另一个主要原因是提供一个“粘合”层,使python能够使用一些外部资源。例如,在Windows版本的python中,您可以使用C模块来允许您使用COM对象。整个COM API是为C编写的,因此C模块是使COM适应Python的最佳方法。 总之,我的建议就是写一些代码来解决你所遇到的问题,看看你是否认为这个结果有足够的价值与世界分享。 P.S.这是启动Python程序员的一个很好的资源: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html |
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |