gevent.monkey.patch_all() と subprocess.Popen と threading で ^C がきかなくなる
以下のようなコードを実行し ^C で止めようとすると、 CPU を 100% 食い始め、固まる。
from gevent import monkey; monkey.patch_all() import threading import time from subprocess import Popen, PIPE def worker(): p = Popen(['vmstat', '3'], stdout=PIPE) while p.poll() is None: line = p.stdout.readline() print line.strip() try: t = threading.Thread(target=worker) t.start() while True: time.sleep(60) except KeyboardInterrupt: print 'interrupted'
一行目を from gevent import monkey; monkey.patch_all(os=False)
にするとちゃんと終了してくれるようになる。
何でかは知らんけどね。