Python C Расширение - есть ли вред в добавлении Py_BEGIN_ALLOW_THREADS вокруг каждого чистого C вызова? - PullRequest
0 голосов
/ 13 февраля 2020

Рекомендуется обернуть чистые C функции, которые блокируют ввод-вывод, или даже чистые C функции, которые проводят значительное время в ЦП, в Py_BEGIN_ALLOW_THREADS и Py_END_ALLOW_THREADS блоках.

Есть ли какие-либо вред, нанесенный в значительной степени всем чистым C функциям (с чистыми C аргументами - без Python объектов API), независимо от того, блокируется ли он на IO или ЦП в течение длительного времени, с Py_BEGIN_ALLOW_THREADS и Py_END_ALLOW_THREADS?

Например, скажем, у вас была следующая функция, где some_pure_c_non_io_func тратит небольшое время на задачу процессора. Есть ли какой-либо вред в освобождении GIL здесь?

static PyObject Foo_bar(Foo *self, PyObject *args, PyObject *kwargs)
{
    int i = 0;

    if (!PyArg_ParseTuple(args, "i", &i)) {
        return NULL;
    }

    Py_BEGIN_ALLOW_THREADS
    some_pure_c_non_io_func(i);
    Py_END_ALLOW_THREADS

    Py_RETURN_NONE;
}
...