Выпуск Python GIL, в то время как в коде C++

Плагины иногда делают свое дело.

Конечно, вы могли бы использовать достаточно mootools, чтобы получить его модель класса / наследования. С реализацией document.id «режима совместимости» в 1.2.3 вы можете съесть свой торт и съесть его тоже (я думаю - не сделал это сам.)

7
задан Trilarion 3 June 2015 в 12:47
поделиться

3 ответа

Не имея понятия, что такое SWIG, я все равно попытаюсь ответить :)

Используйте что-то вроде этого, чтобы выпустить / получить GIL:

class GILReleaser {
    GILReleaser() : save(PyEval_SaveThread()) {}

    ~GILReleaser() {
        PyEval_RestoreThread(save);
    }

    PyThreadState* save;
};

И в кодовом блоке по вашему выбору используйте RAII для выпуска / получить GIL:

{
    GILReleaser releaser;
    // ... Do stuff ...
}
6
ответ дан 6 December 2019 в 14:05
поделиться

Вы можете использовать тот же вызов API, что и для C. Без разницы. Включите "python.h" и вызовите соответствующую функцию.

Также посмотрите, нет ли в SWIG карты типов или чего-то еще, чтобы указать, что GIL-код не удерживается для конкретной функции.

1
ответ дан 6 December 2019 в 14:05
поделиться

Настоящая проблема в том, что SWIG плохо документирован (я видел подсказки по использованию журнала изменений для поиска;)).

Хорошо, я обнаружил, что могу выполнять встроенные функции в SWIG и использовать макросы для выпуска / получения GIL, это выглядит так:

%inline %{
    void wrappedFunction(OriginalObject *o, <parameters>) {
    Py_BEGIN_ALLOW_THREADS
    o->originalFunction(<parameters>);
    Py_END_ALLOW_THREADS
}
%}

Эта функция отсутствует в исходном C ++, но доступна в модуле python. Это (почти) именно то, что я хотел. (я бы хотел обернуть оригинальный метод, как это делает декоратор python)

но доступен в модуле python. Это (почти) именно то, что я хотел. (я бы хотел обернуть оригинальный метод, как это делает декоратор python)

но доступен в модуле python. Это (почти) именно то, что я хотел. (я бы хотел обернуть оригинальный метод, как это делает декоратор python)

8
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: