Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,ctypes创建的线程也是在GIL下创建的吗?_Python_C_Multithreading_Ctypes_Gil - Fatal编程技术网

在python中,ctypes创建的线程也是在GIL下创建的吗?

在python中,ctypes创建的线程也是在GIL下创建的吗?,python,c,multithreading,ctypes,gil,Python,C,Multithreading,Ctypes,Gil,所有python线程(在CPython中)都在GIL下 如果线程是由ctypes创建的,该怎么办 例如,python只是通过C库调用下面的函数,该函数在C区域而不是python中创建线程 #include<thread> int createUnitTestThread(int sasAddr){ sasEngine->thread = new std::thread(....); return 0; } #包括 int createUnitTestThr

所有python线程(在CPython中)都在GIL下

如果线程是由
ctypes
创建的,该怎么办

例如,python只是通过
C库
调用下面的函数,该函数在
C
区域而不是python中创建线程

#include<thread>
int createUnitTestThread(int sasAddr){  
    sasEngine->thread = new std::thread(....);
    return 0;
}
#包括
int createUnitTestThread(int sasAddr){
sasEngine->thread=new std::thread(…);
返回0;
}
它是相同的还是不同的?

不像线程在GIL下,Python解释器中的操作是相同的(包括获取和执行大多数操作码之类的内容,所以执行Python代码的线程大部分是互锁运行的)


C++线程将运行免费,只要它不在Python解释器中调用回函数(用户回调函数或来自Python的函数。):< /P>谢谢你的回答!还有一个问题,尽管

C++线程
不在
GIL
下,但它仍然在
python解释器
上运行,并且具有相同的
PID
,对吗?我很确定这是件坏事™ 如果您从一个非Python创建的线程调用Python,就会发生这种情况,除非您以某种方式显式注册它。@asleea:作为一个线程,是的(好吧,在Linux下是有点混乱,因为一切实际上都是一个任务,所以您可以说它有一个不同的进程id,但不管怎样)。@o11c:可能,尽管我不确定,我从未从线程显式调用python.h stuff;无论如何,这一点建议对回调(ctypes支持并经常使用)非常有用。@o11c,线程可以通过调用
PyGILState
获取GIL,这是ctypes回调在调用目标Python函数之前所做的。