Python中文
首页
教程
问答
标签
搜索
登录
注册
从C调用Py_Finalize()
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>这是<a href="https://stackoverflow.com/questions/1417473/call-python-from-c">Call Python from C++</a>的后续操作</p> <p>在程序启动时,我调用以下函数初始化解释器:</p> <pre><code>void initPython(){ PyEval_InitThreads(); Py_Initialize(); PyEval_ReleaseLock(); } </code></pre> <p>每个线程创建自己的数据结构,并通过以下方式获取锁:</p> ^{pr2}$ <p>一旦您理解了GIL,就可以直截了当了,但问题是在调用Py_Finalize()时,我得到了一个segfault。在</p> <pre><code>void exitPython(){ PyEval_AcquireLock(); Py_Finalize(); } </code></pre> <p>这个引用对Py_Finalize()相当怀疑(或者我只是读错了它),我不确定如果有一些活动线程,PyEval_AcquireLock()是否可以获取锁,如果调用Py_Finalize()时有活动线程会发生什么。在</p> <p>不管怎样,我得到一个segfault,即使我确定所有线程都完成了它们的工作,但前提是至少创建了一个线程。E、 从exitPython()调用initPython()不会产生错误。在</p> <p>我可以忽略这个问题,希望操作系统知道它的作用,但我更希望我能弄清楚到底发生了什么。。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你试过把你的帖子里所有的“工作”都注释掉了吗?换成一个繁忙的循环或者睡觉之类的。这将有助于查明这是您的初始化/关闭代码,还是您在这两者之间实际对Python所做的操作。也许你没有正确地设置线程-在C API中有很多线程特定的函数,我不确定你需要哪些函数来确保正确的操作。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
6 回答
无法使用Django\u mssql\u后端迁移到外部hos
6 回答
无法使用Django&Python3.4连接到MySql
4 回答
无法使用Django+nginx上载媒体文件
1 回答
无法使用Django1.6导入名称模式
6 回答
无法使用Django1.7和mongodb登录管理站点
8 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
4 回答
无法使用Djangockedi验证CBV中的字段
5 回答
无法使用Djangocketditor上载图像(错误400)
6 回答
无法使用Djangocron进行函数调用
8 回答
无法使用Djangofiler djang上载文件
7 回答
无法使用Djangokronos
2 回答
无法使用Djangomssql provid
5 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
5 回答
无法使用Djangomssq迁移Django数据库
1 回答
无法使用Djangonox创建用户
2 回答
无法使用Djangopyodb从Django查询SQL Server
4 回答
无法使用Djangopython3ldap连接到ldap
3 回答
无法使用Djangoredis连接到redis
3 回答
无法使用Django中的FK创建新表
8 回答