Остановка встроенного Python

Еще одно элегантное решение - получить только то, что вам нужно, а не импортировать все lodash

import {forEach,merge} from "lodash";

, а затем использовать его в коде

forEach({'a':2,'b':3}, (v,k) => {
   console.log(k);
})
23
задан Anton L. 16 September 2009 в 11:43
поделиться

2 ответа

Вы можете использовать Py_AddPendingCall(), чтобы добавить функцию, вызывающую исключение, которое будет вызываться при следующем интервале проверки (дополнительную информацию см. В документах на sys.setcheckinterval()). Вот пример с вызовом Py_Exit() (который работает для меня, но, вероятно, не то, что вам нужно), замените его на Py_Finalize() или один из PyErr_Set*():

int quit(void *) {
    Py_Exit(0);
}


PyGILState_STATE state = PyGILState_Ensure();
Py_AddPendingCall(&quit, NULL);
PyGILState_Release(state);

Это должно быть достаточно для любого чистого кода Python. Но обратите внимание, что некоторые функции C могут некоторое время выполняться как одна операция (был пример с длительным поиском по регулярному выражению, но я не уверен, что он все еще актуален).

11
ответ дан Denis Otkidach 29 November 2019 в 03:08
поделиться

Интерпретатор python должен быть запущен в отдельном потоке от программы внедрения, иначе у вас просто никогда не будет возможности прервать интерпретатор.

Когда у вас это есть, возможно, вы у вас может ли один из вызовов исключения Python API вызвать исключение в интерпретаторе? См. Python C API Исключения

1
ответ дан 29 November 2019 в 03:08
поделиться
Другие вопросы по тегам:

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