2017-10-06 148 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