pythonバックグラウンド実行


Pythonバックグラウンド運転Pythonバックグラウンド運転については,多くの資料を検索し,Tornadoバックエンドライブラリと連携して実現した.
まずLinuxの中で、バックグラウンドとフロントについて話します.
現在の状態で、ブロック型コマンド(apt updateまたはyum update)が実行されている場合、このコマンドを実行した上で、コマンドを実行することはできません.もちろん&&はメッセージキューと同様であり、前のコマンドが完了してから(状態にかかわらず)実行される.
バックグラウンドは、複数の命令を同時に実行できる類似の同時実行です.これ以上、リダイレクト出力を行うことができます.
# -*- coding:utf-8 -*-


def run():
    print("run 1")
    import time
    for i in range(100):
    	time.sleep(1)
        print(i)
    
    
if __name__ == '__main__':
    run()
pythonファイル(名前run.py)があるとpython3 run.pyを使用すると、このプログラムは端末に数字(1-100)を出力しながら1秒休憩します.ctrl+cが終了しない限り、またはctrl+zがバックグラウンドに移動します.
しかし、バックエンドプログラムの場合、ctrl+zはプログラムをバックグラウンドに入れ、一時停止状態にある.

  • 1つ目:バックグラウンドで一時停止しない掛け方(安利)
    #    
    >>> python3 run.py
    
    #       ,    
    >>> nohup python3 run.py > my.log &
    
    nohup運転命令を切断しない&バックグラウンド運転>プログラム出力結果をmy.logログにリダイレクト出力し、日付ファイルを指定しない場合はデフォルトのnohup.outを使用します../shファイルで直接実行できます
    ただしバックグラウンドで実行するには、現在の端末を閉じても実行できるようにするには、nohupコマンドと&コマンドが必要です.

  • 2つ目:python-daemon方式を使用
    pip3 install python-daemon
    

    新しいpyファイルを書きます(名前:run 2)
    import daemon
    from run import run 
    
    with daemon.DaemonContext():
        run()
    

    そしてpython3 run2.py

  • 第三種類:ctrl+z+bg指令
    # ctrl+z              
    time@time:~$ python3 run.py 
    runing
    0
    1
    2
    ^Z
    [1]+                    python3 run.py
    time@time:~$ 
    
    #   bg %jubnum       
    time@time:~$ bg 1
    [1]+ python3 run.py &
    time@time:~$ 3
    4
    5
    6
    7
    8
    9
    10
    ...
    

    そうすれば、出力結果は端末の占有を継続し、ctrl+zはバックグラウンドで実行できない.
    なぜなら、bg命令自体はバックグラウンドで一時停止したプログラムを実行し続けるが、プログラム自体をバックグラウンドからフロントに呼び出すわけではないからである.したがって,端末を占有するのはプログラム自体ではなく,結果を出力する.
    現在の端末をctrl+cで終了できない状況にする煩わしい方法がある.
    # ctrl+z              
    time@time:~$ python3 run.py 
    runing
    0
    1
    2
    ^Z
    [1]+                    python3 run.py
    du@du-GL553VD:~$ 
    

    相変わらずですが、bg 1で出力結果にリダイレクト・・・
    time@time:~$ bg 1 > my.log
    #   
    time@time:~$ bg 1 > my.log &
    

    端末を閉じない限り、肉眼では見えない......??
    ***リアルタイム出力では使わないでください.そうしないと、コマンドも書けません.