2017-01-03 2 views
1

Ich habe eine kivy Anwendung in Python, die einige Threads verwendet. Da Python diese Threads aufgrund der globalen Interpreter-Sperre nicht auf verschiedenen Kernen ausführen kann, würde ich gerne versuchen, PyPy dafür zu verwenden und zu sehen, ob ich die Threads von verschiedenen Kernen schneller ausführen kann seit PyPy ist anders und bietet stackless (was auch immer das ist :).Python und Threads mit PyPy?

Hat jemand einige Informationen hat zu teilen, wie ein einfaches Python-Programm zu machen, das einige Threads durch das Modul startet threading, mit dem PyPy Interpreter ausgeführt wird, so dass er diese stackless Featuer verwendet?

Antwort

3

PyPy keinen Single-Thread laufen jedes Mal Python Probleme lösen, da es dort auch den GIL macht - http://doc.pypy.org/en/latest/faq.html#does-pypy-have-a-gil-why

Daneben ist Kivy ein komplexes Projekt Einbettung Python selbst - obwohl ich don‘ Ich weiß es sehr gut, ich bezweifle, dass es möglich ist, das darin verwendete Python für Pypy zu wechseln.

Je nachdem, was Sie tun, möchten Sie möglicherweise das multiprocessing Modul anstelle von threading verwenden - es ist ein Drop-in-Ersatz, der transparente Interprozess Aufrufe an Python-Funktionen macht, und kann daher mehrere nutzen Kerne. https://docs.python.org/3/library/multiprocessing.html

Das ist Standard in CPython und wahrscheinlich aus Kivy verwendet werden kann, wenn (und nur dann) alle Code in der subprocess nehmen nur Pflege Zahlenverarbeitung und so weiter, und alle Benutzer-Interaktion und Anzeigeaktualisierungen werden im Hauptprozess vorgenommen.

+0

Jeah, Ich bin im Moment eine Implementierung mit den Multiprocessing-Tools, seine Art von beschissen, versuchen, weil Kommunikation bedeutet, ich muss eine Menge Dinge, die vorher geteilt wurde Speicher teilen =), Python in dieser Hinsicht wirklich saugt, und ich habe gerade erst von der GIL – Gabriel

+1

mit Shared Memory zu kommunizieren mit Threads Wind up biss dich sowieso ... verwenden Warteschlangen. Das Warteschlangenobjekt von Python funktioniert großartig. –