Вызов Py_Finalize () от C

Да. Мы используем StatSVN для наших отчетов о подрывной деятельности, и один из отчетов, которые это делает, является фиксациями разработчиком.

TortiseSVN также позволяет Вам посмотреть на сообщения журнала по дате для авторов.

10
задан Community 23 May 2017 в 12:13
поделиться

2 ответа

Yeah the whole section is rather dubious but I think I've got my mistake.

I've got to save the PyThreadState when initializing the interpreter and swap this state back in when I finish it (no idea why I need a specific ThreadState to call Finalize - shouldn't every State work as well?)

Anyways the example if other people got the same problem:

PyThreadState *mainstate;

void initPython(){
    PyEval_InitThreads();
    Py_Initialize();
    mainstate = PyThreadState_Swap(NULL);
    PyEval_ReleaseLock();
}

void exitPython(){
    PyEval_AcquireLock();
    PyThreadState_Swap(mainstate);
    Py_Finalize();
}

The only problem with this is, that I can acquire the lock like every other thread, even if there are still threads working. API не упоминает, что происходит, когда вызывается Finalize (), когда другие потоки все еще работают. Звучит как прекрасный пример состояния гонки ..

7
ответ дан 4 December 2019 в 01:57
поделиться

Вы пробовали комментировать всю «работу», проделанную в ваших обсуждениях? Замени его занятым циклом или сном или чем-то еще. Это поможет точно определить, является ли это вашим кодом инициализации / выключения или что-то, что вы на самом деле делаете с Python между ними. Возможно, вы неправильно настраиваете потоки - в C API есть много специфичных для потоков функций, и я не уверен, какие из них вам нужны для обеспечения правильной работы.

1
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

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