2017-10-06 11 views
0

私はPython上で完全に動作するPythonアプリケーションを持っていますが、cython化されたスクリプトを実行するとエラーが発生します。CythonでコンパイルされたスクリプトのPython RecursionError

私がスクリプトをcythonでコンパイルすると、すべてが正常にコンパイルされます。私はLinuxのラズベリーでコンパイルしていて、それを実行しています。

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はPySideベースであり、コンパイル時には常にブレークします。

setup.sh

​​

は、その後、私は私のアプリ

sudo python3 mainGUI.py 

を実行し、すべてがOKのようです、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?私は同じエラーを持っている/

感謝:)

答えて

0

:私は、このプロセスでは見ることができます

ことの一つは、そのcythonがメモリに最適化された自分のアプリケーションを作っていないです。まったく同じ。 これは、pysideの "信号接続"機能を使用している場合にのみ発生します。 たとえば、タイマーを使用して時計を表示します。

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

私はタイマーを使用しないことに決めました。 OK。それは今のところ働きます。 ダブルクリックすると同じエラーが発生します。これは悪いです。 ラジオボタンを接続するときに同じエラーが発生しました。

更新:ソリューション、私はPyQt5に移動し、ライセンスを支払う予定です。 Cythonスクリプトは、信号スロット機能で正常に動作します。

+0

こんにちは、はい、問題はpysideようです。私たちの問題は、すべてが信号で動作することです。私たちのプロジェクトは終了し、PyQtへの切り替えには多くの作業が必要になります。(しかし、アドバイスをいただきありがとうございます:) – EinSoldiatGott

+0

私のコードは1500行あります。 私は30分でpyQtに変換しました。 ウィジェットとメソッドの名前は同じです。 少し速く動作します。 – Ando

+0

本当に?、私は今しようとしています。開発者のライセンスは500米ドルです。 – EinSoldiatGott

関連する問題