実行中のプログラムを『任意のタイミング』で一時停止して再開する方法です。
プログラムに特別な仕掛けは必要ありません。
キーボードの『Pause キー(ポーズキー)』を押すだけです。
キーボードの右上のほうにある『Pause/Break キー』のことです。
実行中の Python を一時停止するには、ウィンドウをアクティブにしてから、キーボードの Pause キーを押します。
特に何も表示は出ませんでしたが、タスクマネージャーで CPU の使用率を見たら、止まっていることがわかりました。
プログラムの一時停止は、『cmd.exe のコマンドプロンプトウィンドウ』と『py.exe のウィンドウ』のどちらでも可能でした。
一時停止するときは、ウィンドウをクリックするなどして、アクティブにしてからポーズキーを押します。
これで、プログラムが止まりました。
再開するときは、ウィンドウをクリックするなどして、アクティブにしてから何かキーを押します。
これで、プログラムが再開しました。
ポーズキーは、マルチプロセス処理でも有効でした。
マルチプロセス処理中にポーズキーを押したら、子プロセスがすべて一時停止しました。
何かキーを押すと、子プロセスが一斉に再開しました。
Python 以外でも、コマンドラインで動いてるようなプログラムであれば、たいていポーズキーで一時停止と再開が可能でした。
Pythonプログラムを一時停止するコード例
プログラムの一時停止を実験するための Python スクリプトです。
特別な仕掛けはありません。
スリープでゆっくり動く関数を作って、それをシングルプロセス処理で動かしてから、マルチプロセス処理で動かしました。
実行中に、ウィンドウをアクティブにしてから Pause キーを押すと、スクリプトの実行が止まります。
何かキーを押すと、スクリプトが再開します。
コード
以下のスクリプトを実行すると、0.5 秒ごとにプロセス ID を表示します。
実行時間は、約10秒です(シングル5秒、マルチ5秒)。
シングルプロセス処理中に Pause キーを押すと、処理が止まります。
マルチプロセス処理中に Pause キーを押しても、処理が止まります。
"""Pauseキーで一時停止する実験プログラム"""
from multiprocessing import Process
import os
import time
def main():
"""メイン関数"""
print('シングルプロセス処理')
mp_proc(0)
print('マルチプロセス処理')
ps = []
for a in (1, 2, 3):
ps.append(Process(target=mp_proc, args=(a, )))
for p in ps:
p.start()
for p in ps:
p.join()
#『続行するには何かキーを押してください . . .』と表示させる
os.system('PAUSE')
return
def mp_proc(a):
"""sleepでゆっくり実行する関数"""
# 実行中にキーボードの『Pauseキー(ポーズキー)』を押すと、
# プログラムの実行が一時停止します。
# シングルプロセス処理中に『Pauseキー』を押すと、
# プロセスが一時停止しました。
# マルチプロセス処理中に『Pauseキー』を押すと、
# すべての子プロセスが一時停止しました。
# 一時停止したプログラムを再開するには、
# 何かキーを押します。たとえば、矢印キーなど。
# 一時停止と再開のキー入力は、
# 事前にウィンドウをクリックして、
# ウィンドウをアクティブにしてから行います。
# parent process id (親プロセスID)
ppid = os.getppid()
# process id (子プロセスID)
pid = os.getpid()
for n in range(0, 10):
# 進捗表示
print('a: %d n: %d ppid: %d pid: %d' % (a, n, ppid, pid))
# スリープ 0.5秒
time.sleep(0.5)
else:
print('a: %d END ppid: %d pid: %d' % (a, ppid, pid))
return
if __name__ == '__main__':
main()
実行結果
Python スクリプトの実行結果です。
途中、キーボードの Pause キーを押して、一時停止と再開を繰り返しました。
一時停止と再開を繰り返しても、コンソール画面には何も表示されませんでした。
ですが、タスクマネージャーで Python プロセスの CPU 使用率を見たら、止まっていることがわかりました(使用率0% になっていました)。
※ プロセス ID (ppid, pid) は、実行するたびに変わりました。
シングルプロセス処理
a: 0 n: 0 ppid: 7016 pid: 5760
a: 0 n: 1 ppid: 7016 pid: 5760
a: 0 n: 2 ppid: 7016 pid: 5760
a: 0 n: 3 ppid: 7016 pid: 5760
a: 0 n: 4 ppid: 7016 pid: 5760
a: 0 n: 5 ppid: 7016 pid: 5760
a: 0 n: 6 ppid: 7016 pid: 5760
a: 0 n: 7 ppid: 7016 pid: 5760
a: 0 n: 8 ppid: 7016 pid: 5760
a: 0 n: 9 ppid: 7016 pid: 5760
a: 0 END ppid: 7016 pid: 5760
マルチプロセス処理
a: 1 n: 0 ppid: 5760 pid: 8936
a: 2 n: 0 ppid: 5760 pid: 2992
a: 3 n: 0 ppid: 5760 pid: 8084
a: 1 n: 1 ppid: 5760 pid: 8936
a: 2 n: 1 ppid: 5760 pid: 2992
a: 3 n: 1 ppid: 5760 pid: 8084
a: 1 n: 2 ppid: 5760 pid: 8936
a: 2 n: 2 ppid: 5760 pid: 2992
a: 3 n: 2 ppid: 5760 pid: 8084
a: 3 n: 3 ppid: 5760 pid: 8084
a: 2 n: 3 ppid: 5760 pid: 2992
a: 1 n: 3 ppid: 5760 pid: 8936
a: 1 n: 4 ppid: 5760 pid: 8936
a: 3 n: 4 ppid: 5760 pid: 8084
a: 2 n: 4 ppid: 5760 pid: 2992
a: 1 n: 5 ppid: 5760 pid: 8936
a: 2 n: 5 ppid: 5760 pid: 2992
a: 3 n: 5 ppid: 5760 pid: 8084
a: 2 n: 6 ppid: 5760 pid: 2992
a: 1 n: 6 ppid: 5760 pid: 8936
a: 3 n: 6 ppid: 5760 pid: 8084
a: 2 n: 7 ppid: 5760 pid: 2992
a: 1 n: 7 ppid: 5760 pid: 8936
a: 3 n: 7 ppid: 5760 pid: 8084
a: 2 n: 8 ppid: 5760 pid: 2992
a: 3 n: 8 ppid: 5760 pid: 8084
a: 1 n: 8 ppid: 5760 pid: 8936
a: 2 n: 9 ppid: 5760 pid: 2992
a: 1 n: 9 ppid: 5760 pid: 8936
a: 3 n: 9 ppid: 5760 pid: 8084
a: 2 END ppid: 5760 pid: 2992
a: 1 END ppid: 5760 pid: 8936
a: 3 END ppid: 5760 pid: 8084
続行するには何かキーを押してください . . .
Pause キーで処理を一時停止するメリット
任意のタイミングで、一時停止と再開ができるのがメリットでした。
プログラムに特別な仕掛けが不要だったのも良かったです。
現状のプログラムのままで、すぐに一時停止と再開ができました。
おすすめの知識です。
Python プログラムに限らず、コマンドラインで動いているプログラムなら、たいてい Pause キーで一時停止できました。
Pause キーで一時停止『できたもの』と『できなかったもの』
自分が試してきた範囲では、Pause キーで一時停止と再開ができたのは、コマンドラインウィンドウだけでした。
cmd.exe や py.exe のウィンドウで動いていたプログラムです。
一方で、GUI(ジーユーアイ、グラフィカルユーザーインターフェース)プログラムでは、Pause キーが効かず、一時停止できませんでした。
GUI プログラムでも、Pause キーを押したときに一時停止するような実装があれば、機能する場合があると思います。
プログラムの一時停止を使った場面
一時的にディスクアクセスを止めたいときに使いました。
あと、何かエラーが大量に表示されてしまったときに、表示を止めるために使いました。
あとは、ルーターの再起動をしたいときに使いました。
ルーターが応答できるようになるまで、プログラムを一時停止しておくことで、無用なエラーページの取得を防ぐことができました。
Pause キーによる一時停止と再開はおすすめ
キーボードのポーズキーは、すぐに使えるのでおすすめです。
Pause キーを押せば、好きなタイミングで、プログラムを一時停止できました。
ちょっとプログラムを止めたいときに、Pauseキー はいつでも使えました。