Еще одно элегантное решение - получить только то, что вам нужно, а не импортировать все lodash
import {forEach,merge} from "lodash";
, а затем использовать его в коде
forEach({'a':2,'b':3}, (v,k) => {
console.log(k);
})
Вы можете использовать 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 могут некоторое время выполняться как одна операция (был пример с длительным поиском по регулярному выражению, но я не уверен, что он все еще актуален).
Интерпретатор python должен быть запущен в отдельном потоке от программы внедрения, иначе у вас просто никогда не будет возможности прервать интерпретатор.
Когда у вас это есть, возможно, вы у вас может ли один из вызовов исключения Python API вызвать исключение в интерпретаторе? См. Python C API Исключения