種別[gsm] 2021-07-10T03:47:16Z
セクショングローバル共有メモ
日時2021-07-10T03:47:16Z
元URL(URLなし)

Windows の Python で signal.signal を使って…

jrf> Windows の Python で signal.signal を使って Ctrl-C (SIGINT) でデバッガに入るような処理を書こうと思ったのだがうまくいかない。

forrtl: error (200): program aborting due to control-C event
Image              PC                Routine            Line        Source

libifcoremd.dll    00007FFFAD7D3B58  Unknown               Unknown  Unknown
KERNELBASE.dll     00007FFFF71FB933  Unknown               Unknown  Unknown
KERNEL32.DLL       00007FFFF7537034  Unknown               Unknown  Unknown
ntdll.dll          00007FFFF9422651  Unknown               Unknown  Unknown
QObject::~QObject: Timers cannot be stopped from another thread

…みたいなエラーが出てて、ググると、Python 2.7系と scipy などにあるエラーらしい。

《Ctrl-C crashes Python after importing scipy.stats - Stack Overflow》  
https://stackoverflow.com/questions/15457786/ctrl-c-crashes-python-after-importing-scipy-stats

↑によって、

import os
os.environ['FOR_DISABLE_CONSOLE_CTRL_HANDLER'] = '1'
from scipy.stats import zscore

…となどとすることで解決した。scipy モジュールなどを読み込む前に os.environ[...] = '1' が必要なのがミソらしい。