Ich bin Python in einer Multithread-C++ - Anwendung einbetten, ist es sicher, Py_Initialize()
in mehreren Threads aufzurufen? Oder soll ich es im Hauptthread nennen?Aufruf von Py_Initialize() in mehreren Threads
Antwort
Der Py_Initialize()
Code enthält:
if (initialized)
return;
initialized = 1;
Die Dokumentation für die Funktion auch sagt:
Dies ist eine no-op, wenn für eine Sekunde aufgerufen Zeit (ohne zuerst Py_Finalize() aufzurufen).
Meine Empfehlung ist, dass Sie es nur aus dem Hauptthread tun, obwohl es je nachdem, was Sie tun, kann es kompliziert werden.
Das Problem ist, dass Signalhandler nur im Kontext des Haupt-Python-Thread ausgelöst werden. Das heißt, welcher Thread auch immer zu rufen war: Py_Initialize()
. Wenn das also ein transienter Thread ist und nur einmal verwendet und dann verworfen wird, dann hat keine Chance, jemals Signalhandler aufgerufen zu haben. Sie müssen sich Gedanken darüber machen, wie Sie mit Signalen umgehen.
Seien Sie auch vorsichtig bei der Verwendung vieler transienter Threads, die in C-Code mit nativer Thread-API erstellt wurden und in Python-Interpreter aufrufen, da jeder im Python-Interpreter Daten erzeugt. Dies wird sich anhäufen, wenn Sie diese externen Threads weiterhin erstellen und verwerfen. Sie sollten stattdessen versuchen, einen Thread-Pool zu verwenden, wenn Sie von externen Threads aus aufrufen und vorherige Threads erneut verwenden.
Wenn 'Py_Initialize()' in mehreren Threads aufgerufen wird, wie garantiert man Thread-Sicherheit, wenn ein Thread diese Variable 'initialisiert' liest, während ein anderer Thread sie auf '1' schreibt? – Allanqunzi
Ja, das wäre vielleicht ein anderes Thema. Sie müssten eine Mutex-Sperre um den Aufruf von '' Py_Initialize() '' in diesem Fall verwenden. –
- 1. Aufruf accept() von mehreren Threads
- 2. Loops in mehreren Threads
- 3. Ausführen von mehreren Threads
- 4. Kann Aufruf von WSAStartup() aus mehreren Threads einen Deadlock verursachen?
- 5. Verarbeitung von Dateien in mehreren Threads
- 6. Verzögerte Entwertung von etwas in mehreren Threads
- 7. Zeichnen von mehreren Threads in Qt
- 8. Pandas Datenrahmen in mehreren Threads
- 9. Jmeter Zufallsvariable in mehreren Threads
- 10. Android: OpenGL in mehreren Threads
- 11. Beobachtbar von Futures - onNext von mehreren Threads
- 12. Python: Drucken in mehreren Threads
- 13. Py_Initialize Absturz auf Windows OS
- 14. Java: Synchronisieren von Threads auf mehreren Servern
- 15. Java Multithreading: Variable von mehreren Threads ändert
- 16. Abfrage von mehreren Threads auf einer Datenbanktabelle
- 17. Erstellen von Verzeichnissen mit mehreren Threads
- 18. Verwenden von libcurl erfolglos mit mehreren Threads
- 19. Ausführen von Testmethoden mit mehreren gleichzeitigen Threads
- 20. Zugriff auf Array von mehreren Threads
- 21. C# Aktualisierung TextBox von mehreren Threads
- 22. Handhabung Zustand in einer Instanz, die von mehreren Threads
- 23. Java-Einzelprozess mit mehreren Threads
- 24. In Textdatei aus mehreren Threads schreiben?
- 25. Web Parser mit mehreren Threads
- 26. Console.WriteLine aus mehreren Threads aufrufen
- 27. Matplotlib: simultanes Plotten in mehreren Threads
- 28. Sperre auf eine Variable in mehreren Threads
- 29. Load DLL von mehreren Threads in C# -Anwendung
- 30. Python - Py_Initialize nicht aufgelöst während der Kompilierung
Mögliches Duplikat von [Ist es threadsicher, eine statische Variable zu ändern?] (Http://stackoverflow.com/questions/43837721/is-it-thread-safe-to-modify-a-static-variable) –
Sie haben diese Frage bereits gestellt. wenn auch mit einem anderen Fokus. Bitte beachten Sie meine Antwort auf das Duplikat. –