Хотя старый вопрос, но может быть, это может быть полезно кому-то.
Я использую этот способ преобразования строки в int number
var str = "25"; // string
var number = str*1; // number
Итак, при умножении на 1 , значение не изменяется, но js автоматически возвращает число.
Но, как показано ниже, это следует использовать, если вы уверены, что str
является числом (или может быть представлено как число), в противном случае оно вернет NaN - не число.
вы можете создать простую функцию для использования, например
function toNumber(str) {
return str*1;
}
[/g0]
Ваш код не устанавливает обработчики сигналов и s_signal_handler
не используется. Вам необходимо вызвать функцию signal
, чтобы зарегистрировать свой обратный вызов.
#include <atomic>
#include <signal.h>
::std::atomic<bool> s_interrupted{};
static void signal_handler(int signal)
{
s_interrupted = true;
}
int main()
{
::signal(SIGINT, &::signal_handler);
Вы не можете использовать consoleHandler()
здесь, потому что нет консоли . Ядро IPython - это «безголовый» дочерний процесс, который выполняет код по запросу, управляемый внешним интерфейсом Jupyter.
Чтобы прервать работающее ядро IPython, интерфейс Jupyter использует сигнал SIGINT
. Это делается как на POSIX, так и на Windows; в Windows Jupyter использует дополнительную инфраструктуру, построенную вокруг CreateEventA
, SetEvent
и WaitForMultipleObjects
для достижения того же результата, что и вызов POSIX os.killpg(PID, SIGINT)
; отдельный поток опрашивает событие и запускает сигнал SIGINT
в основном потоке.
Обратите внимание, что ядро IPython явно восстанавливает обработчик сигналов Python по умолчанию для каждого сообщения, которое оно обрабатывает. См. Реализации ipykernel.kernelbase.Kernel
для методов pre_
и post_handler_hook
:
self.saved_sigint_handler = signal(SIGINT, default_int_handler)
и
signal(SIGINT, self.saved_sigint_handler)
Эти два перехвата выполняются до и после каждый обработчик сообщений (то есть для каждое сообщение, отправляемое внешним интерфейсом процессу ядра , включая сообщения выполнения ).
Именно signal.default_int_handler
вызывает KeyboardInterrupt
в основном потоке Python. Если ваш код должен обнаруживать прерывания, он должен будет регистрировать свой собственный обработчик signal
каждый раз, когда IPython запускает ячейку.
В качестве дополнительного примечания: автономный интерактивный интерпретатор Python также не использует SetConsoleCtrlHandler
для обнаружения прерываний клавиатуры ; единственное место, которое используется в исходном коде Python, находится в модуле запуска py
, и только тогда, чтобы глушить управляющие коды с помощью обработчика, который всегда возвращает TRUE
. Вместо этого Python использует Windows, посылающую сигнал SIGINT
всем подключенным процессам консоли для активного окна консоли .