Heim > Web-Frontend > js-Tutorial > Mehrere Möglichkeiten, Python-Skripte im Hintergrund auszuführen

Mehrere Möglichkeiten, Python-Skripte im Hintergrund auszuführen

PHP中文网
Freigeben: 2017-04-01 15:15:29
Original
3290 Leute haben es durchsucht

Ein in Python geschriebenes Überwachungsskript test1.py, das im while True-Modus ausgeführt wird. Starten Sie das Skript über den folgenden Befehl, wenn SSH remote (mit Putty-Terminal) ist:

Der Code lautet wie folgt:

python test1.py &
Nach dem Login kopieren

Jetzt läuft das Skript normal und die Prozessnummer kann über ps angezeigt werden. Zu diesem Zeitpunkt ist das SSH-Terminal direkt geschlossen (nicht mit Nachdem ich mich erneut angemeldet hatte, stellte ich fest, dass der Prozess beendet war.
Das Problem wurde durch den Hintergrundstart gelöst. Ich werde es hier für meine zukünftige Referenz zusammenfassen.

Linux läuft im Hintergrund implementiert durch Fork

In der Linux-Umgebung wird der Daemon-Prozess in c durch Fork implementiert. Python kann auch auf diese Weise implementiert werden:



Der Code lautet wie folgt:

#!/usr/bin/env python
import time,platform
import os
def funzioneDemo():
    # 这是具体业务函数示例
    fout = open('/tmp/demone.log', 'w')
    while True:
        fout.write(time.ctime()+'\n')
        fout.flush()
        time.sleep(2)
    fout.close()
def createDaemon():
    # fork进程        
    try:
        if os.fork() > 0: os._exit(0)
    except OSError, error:
        print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)
        os._exit(1)    
    os.chdir('/')
    os.setsid()
    os.umask(0)
    try:
        pid = os.fork()
        if pid > 0:
            print 'Daemon PID %d' % pid
            os._exit(0)
    except OSError, error:
        print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)
        os._exit(1)
    # 重定向标准IO
    sys.stdout.flush()
    sys.stderr.flush()
    si = file("/dev/null", 'r')
    so = file("/dev/null", 'a+')
    se = file("/dev/null", 'a+', 0)
    os.dup2(si.fileno(), sys.stdin.fileno())
    os.dup2(so.fileno(), sys.stdout.fileno())
    os.dup2(se.fileno(), sys.stderr.fileno())
    # 在子进程中执行代码
    funzioneDemo() # function demo
if name == 'main': 
    if platform.system() == "Linux":
        createDaemon()
    else:
        os._exit(0)
Nach dem Login kopieren
Er wird durch die Upstart-Methode implementiert


Die Anwendung kann über upstart in einen Systemdienst gekapselt werden. Das vollständige Beispiel ist hier direkt aufgezeichnet.

1. Python-Skript schreiben


Der Code lautet wie folgt:

[root@local t27]
# cat test123.py
#!/usr/bin/env python
import os,time
while True :    
print time.time()    
time.sleep(1)
Nach dem Login kopieren

2 upstat
Konfigurationsdatei
Der Code lautet wie folgt:

[root@local t27]
# cat /etc/init/mikeTest.confdescription "My test"author "Mike_Zhang@live.com"
start on runlevel [234]stop on runlevel [0156]
chdir /test/t27exec /test/t27/test123.pyrespawn
Nach dem Login kopieren
3. Upstate neu laden


Der Code lautet wie folgt:

initctl reload-configuration
Nach dem Login kopieren
4. Starten Sie den Dienst

Der Code lautet wie folgt:


[root@local t27]# start mikeTest
mikeTest start/running, process 6635
[root@local t27]# ps aux | grep test123.py
root      6635  0.0  0.0  22448  3716 ?        
Ss   09:55   0:00 python /test/t27/test123.py
root      6677  0.0  0.0 103212   752 pts/1   
 S+   09:56   0:00 grep test123.py
Nach dem Login kopieren

5. Stoppen Sie den Dienst
Der Code lautet wie folgt:

[root@local t27]# stop mikeTest
mikeTest stop/waiting
[root@local t27]# ps aux | grep test123.py
root      6696  0.0  0.0 103212   752 pts/1    S+   09:56   0:00 grep test123.py
[root@local t27]#
Nach dem Login kopieren
Erreicht durch Bash-Skript

1, Python-Code


Der Code lautet wie folgt:

[root@local test]# cat test123.py#!/usr/bin/env python
import os,time
while True :    print time.time()    time.sleep(1)
Nach dem Login kopieren

2. Startskript schreiben

Wenn Sie & direkt verwenden, um den Prozess zu starten:

Der Code lautet wie folgt:
[root@local test]# cat start.sh#! /bin/sh
python test123.py &
Nach dem Login kopieren

Schließen Sie das SSH-Terminal direkt, wodurch der Prozess beendet wird.

Erreicht über screen, tmux usw.

Wenn Sie das Programm vorübergehend ausführen möchten, können Sie das Programm über screen, tmux starten eine Beschreibung, wie man tmux startet.
[root@local test]#./start.sh
Nach dem Login kopieren


1. Starten Sie tmux

Geben Sie tmux in das Terminal ein, um zu starten
python test123.py &
Nach dem Login kopieren


2. Starten Sie das Programm in tmux

Führen Sie einfach den folgenden Befehl direkt aus (siehe Skript oben): python test123.py

3. Schließen Sie das SSH-Terminal direkt (z. B. die Schaltfläche „Schließen“ auf Putty); >

4. Führen Sie nach dem erneuten Hochfahren den folgenden Befehl aus:

Der Code lautet wie folgt:

Jetzt Sie können sehen, dass das Python-Programm noch vorhanden ist. Führen Sie es normal aus.

Laufen im Hintergrund unter Windows

Ich habe es unter Windows nicht eingehend studiert. Die Methode, die ich oft verwende, besteht darin, die Erweiterung des Python-Skripts in „zu ändern“. .pyw“ und doppelklicken Sie darauf. Es kann im Hintergrund ausgeführt werden, ohne dass Code geändert werden muss.

Das Obige ist der Inhalt verschiedener Möglichkeiten, Python-Skripte im Hintergrund auszuführen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage