2016-03-24 13 views
2

Alle Python-Thread (in CPython) sind unter GIL.Ist der von ctypes erstellte Thread auch unter GIL in Python?

Was passiert, wenn der Thread von ctypes erstellt wird?

Zum Beispiel ruft Python nur die untere Funktion durch C Library und die Funktion erstellen einen Thread in C Bereich nicht Python.

#include<thread> 
int createUnitTestThread(int sasAddr){ 
    sasEngine->thread = new std::thread(....); 
    return 0; 
} 

Ist es das gleiche oder nicht?

Antwort

2

Es ist nicht wie Fäden unter der GIL sind, Operationen in der Python-Interpreter (einschließlich Sachen wie der Abruf und die Ausführung der meisten Opcodes, so dass deshalb Threads, die meist verzahnt Python-Code Lauf ausführen).

Ihr C++ - Thread wird kostenlos ausgeführt, solange er keine Funktionen im Python-Interpreter (entweder Benutzerrückrufe oder Funktionen aus Python.h) zurückruft.

+0

Vielen Dank für Ihre Antwort! Noch eine Frage, obwohl der 'C++ - Thread' nicht unter 'GIL' ist, läuft er immer noch auf dem' Python-Interpreter' mit der gleichen 'PID', oder? – SangminKim

+0

Ich bin mir ziemlich sicher, dass Bad Things ™ passieren wird, wenn Sie Python von einem Thread aufrufen, der nicht von Python erstellt wurde, es sei denn, Sie registrieren ihn explizit. – o11c

+0

@asleea: ein Thread zu sein, ja (gut, unter Linux ist ein bisschen mehr verwirrt, weil alles eigentlich eine Aufgabe ist, so könnte man argumentieren, es hat eine andere Prozess-ID, aber was auch immer). –