Skip to content

Commit 81ed041

Browse files
authored
Update p06_calling_python_from_c.rst
1 parent 6fd2af4 commit 81ed041

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

source/c15/p06_calling_python_from_c.rst

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
----------
1212
解决方案
1313
----------
14-
在C语言中调用Python非常简单,不过设计到一些小窍门
14+
在C语言中调用Python非常简单,不过涉及到一些小窍门
1515
下面的C代码告诉你怎样安全的调用:
1616

17-
::
17+
:: c
1818

1919
#include <Python.h>
2020

@@ -75,7 +75,7 @@
7575
有很多种方法可以让你这样做,
7676
比如将一个可调用对象传给一个扩展模块或直接写C代码从已存在模块中提取出来。
7777

78-
下面是一个简单例子用来掩饰从一个嵌入的Python解释器中调用一个函数
78+
下面是一个简单例子用来展示从一个嵌入的Python解释器中调用一个函数
7979

8080
::
8181

@@ -214,9 +214,9 @@
214214
第二个函数相对安全点,因为它允许传递NULL指针(直接忽略它),
215215
这也是为什么我们使用它来清理可选的关键字参数。
216216

217-
调用万Python函数之后,你必须检查是否有异常发生。
217+
调用完Python函数之后,你必须检查是否有异常发生。
218218
``PyErr_Occurred()`` 函数可被用来做这件事。
219-
对对于异常的处理就有点麻烦了,由于是用C语言写的,你没有像Python那么的异常机制
219+
对于异常的处理就有点麻烦了,由于是用C语言写的,没有Python那样的异常机制
220220
因此,你必须要设置一个异常状态码,打印异常信息或其他相应处理。
221221
在这里,我们选择了简单的 ``abort()`` 来处理。另外,传统C程序员可能会直接让程序奔溃。
222222

@@ -265,13 +265,13 @@
265265
一旦返回,``PyGILState_Ensure()`` 可以确保调用线程独占Python解释器。
266266
就算C代码运行于另外一个解释器不知道的线程也没事。
267267
这时候,C代码可以自由的使用任何它想要的Python C-API 函数。
268-
调用成功后,PyGILState_Release()被用来讲解释器恢复到原始状态
268+
调用成功后,PyGILState_Release()被用来将解释器恢复到原始状态
269269

270270
要注意的是每一个 ``PyGILState_Ensure()``
271271
调用必须跟着一个匹配的 ``PyGILState_Release()`` 调用——即便有错误发生。
272272
在这里,我们使用一个 ``goto`` 语句看上去是个可怕的设计,
273-
但是实际上我们使用它来讲控制权转移给一个普通的exit块来执行相应的操作
274-
在 ``fail:`` 标签后面的代码和Python的 ``fianl:`` 块的用途是一样的。
273+
但是实际上我们使用它来将控制权转移给一个普通的exit块来执行相应的操作
274+
在 ``fail:`` 标签后面的代码和Python的 ``final:`` 块的用途是一样的。
275275

276276
如果你使用所有这些约定来编写C代码,包括对GIL的管理、异常检查和错误检查,
277277
你会发现从C语言中调用Python解释器是可靠的——就算再复杂的程序,用到了高级编程技巧比如多线程都没问题。

0 commit comments

Comments
 (0)