我编写了一个PythonC扩展(ftaCalculate
),以提高以前用纯Python编写的给定函数的性能。我已经能够将执行速度提高x10倍,所以在这个站点上没有问题
import ftaCalculate
cs_min = ftaCalculate.mcs(N, tree)
但是,我正在Django框架中执行此函数。问题是,在函数ftaCalculate.mcs
没有完成之前,我不能在我的网站上做任何事情。在Python中使用该函数时,我可以按其他按钮并访问其他URL
当多个用户同时在网站中工作时,这是一个特别的问题,因为其他用户在执行此功能时无法执行任何操作
实际上,您可以在下图中看到,在运行函数时,一个内核处于100%状态:
你知道有什么方法可以在不“冻结”Django框架的情况下调用我的PythonC扩展吗
在最坏的情况下,我可以尝试用Celery调用这部分代码。然而,我更喜欢另一种解决方案,因为在纯Python中运行时不需要芹菜
正如@Kemp所说,问题出在全局解释器锁(GIL)上。解决方案是在我不使用任何Python对象时释放GIL,然后重新获取它
在Releasing the GIL from extension code section的详细信息之后,我将相应的C代码放在以下两行之间:
这允许在执行函数时调用Django中的其他进程
相关问题 更多 >
编程相关推荐