【发布时间】:2013-07-31 01:58:17
【问题描述】:
在编写 python 代码时,我的典型工作流程是使用交互式提示并执行类似的操作
write function
repeat until working:
test function
edit function
确定一切正常后,我将以非交互模式运行代码并收集结果。
有时函数运行速度有点慢,必须进行优化。
我对使用 cython 来优化这些慢速函数很感兴趣,但我想保持我的交互式工作流程,即运行函数、进行更改、再次运行它们。
有没有简单的方法可以做到这一点?
到目前为止,我已经尝试将我的 cython 函数放在一个单独的模块“my_functions.pyx”中:
def fun1(int x):
return x + 130
def fun2(int x):
return x / 30
然后运行(在交互式提示下)
import pyximport; pyximport.install()
import my_functions as mf
mf.fun1(25)
这是第一次工作,但我想更改我的 cython 函数并在同一个交互式会话中重新加载它们。
运行
import my_functions as mf
根本不更新函数。并运行
reload(mf)
给出一个错误: 没有名为 my_functions 的模块
唯一可行的方法是退出当前会话,重新启动 ipython,然后重新导入模块。但是这种方式会扼杀交互式运行的好处。
有没有更好的方法来以交互方式使用 cython 优化功能?
如果没有,您能否描述一些使用 cython 优化代码的其他方法?
感谢任何帮助。
【问题讨论】:
-
问题是cython模块被编译成共享库,无法通过
reload函数重新加载。 AFAIK 目前您根本无法卸载共享库,因此您必须重新启动解释器。请注意,如果使用 Qt 控制台,可以避免重新启动 ipython:使用Ctrl+.仅重新启动内核,而不重新启动整个控制台。
标签: python optimization cython