2017-10-06 107 views
0

我有一个python应用程序,它在python上完美运行,但运行cythonized脚本时出错。使用Cython编译脚本的Python RecursionError

当我用cython编译脚本时,一切都编译好了,我正在用Linux编译Raspberry并在其上运行。

setup.py

from distutils.core import setup 
from Cython.Build import cythonize 
setup(ext_modules=cythonize(["*.py"]),) 

然后我运行setup.sh编译和我删除所有的编译*的.py,* .c和* .pyc文件只是为了确保正在运行什么是编译* .so文件。我编译除了mainGUI.py之外的所有东西,它是基于PySide的,它在编译时总是会中断。

setup.sh

​​

然后我跑我的应用程序

sudo python3 mainGUI.py 

,一切似乎是确定的GUI显示了,菜单的工作,但是当我阅读终端,我得到这个输出很多次:

RecursionError: maximum recursion depth exceeded while calling a Python object 

但我不知道什么script.py扔这个。我已经尝试将一些scripts.py从编译中退出,并让它们以.py(例如mySQLdatabaseScript.py)的形式运行,并且RecursionError的数量减少但未消除。

所以,即使当我的GUI运行,似乎没有错误,我的大部分功能不工作,他们抛出RecursionError。

我读过,我可以增加递归限制

sys.setrecursionlimit(1500) 

但我应该在哪里做呢?在mainGUI.py中?或在每个script.py?

有一两件事,我可以在这个过程中看到的是,用Cython不是让我的应用程序对内存的优化:

回答

0

/

谢谢:)我有同样的错误。一模一样。 我注意到,只有当我使用pyside“信号连接”功能时才会出现这种情况。例如,使用计时器显示时钟。

timer = QtCore.QTimer(self) 
timer.timeout.connect(self.showTime) #will fail in every showTime Call 
timer.start(1000) 

我决定不使用计时器。好。它现在工作。 连接双击时出现同样的错误。这不好。 连接单选按钮时出现同样的错误。

更新:解决方案,我转移到PyQt5,并计划支付许可证。 Cythonized脚本适用于信号插槽功能。

+0

嗨,是的,问题似乎是坡道。我们遇到的问题是,所有信号都适用:/。我们的项目已完成,切换到PyQt将涉及很多工作:(但感谢您的建议,我们会考虑它:) – EinSoldiatGott

+0

我的代码有1500行。 我在30分钟内将它转换为pyQt。 小部件和方法的名称是相同的。 它工作得更快。 – Ando

+0

真的吗?我正在尝试。开发者的许可证费用为500美元。 – EinSoldiatGott