Cython化for循环生成器的循环

san*_*san 4 python for-loop generator cython coroutine

我有Python代码,有很多循环使用Python生成器的数据.有些还会产生处理过的数据.这是一个瓶颈,我想加速这部分,并考虑使用Cython.

什么是处理发电机和产量的推荐方法.我想要

  • 将Python生成器转换为Cython而无需数据副本
  • 使Cython for循环消耗Python生成器生成的数据
  • 产量数据像发电机

我猜这是一个常见的用例,推荐的方法是什么.

lot*_*rio 7

一些建议:

  • Cython支持开箱即用的生成器,所以你应该尝试将带有生成器的Python代码传递给你cython,看看你得到了什么样的加速.
  • 下一步是在循环中添加尽可能多的静态类型信息,以加快生成器正在进行的工作.
  • Python生成器很酷,但如果性能很重要,它们并不是最快速的方法.将转换瓶颈转换为使用连续数组更好.
  • 查看Cython的类型化内存视图.
  • 您还可以将Cython与C++ std :: vectors和其他高性能容器对象一起使用.

我们需要有关您的目标和限制的更多信息,以便在此提供更多帮助.一个精简的例子会有所帮助.

  • 您可以考虑使用混合缓冲解决方案:您可以存储C数组或键入的memorview,使用它们进行批量计算,然后逐个生成结果.这样您就可以保留流式算法,但可以从阵列性能和连续内存访问中受益. (2认同)