webentwicklung-frage-antwort-db.com.de

Wie kann ich das Python-Programm für immer ausführen?

Ich muss mein Python-Programm für immer in einer Endlosschleife ausführen.

Momentan führe ich es so aus - 

#!/usr/bin/python

import time

# some python code that I want 
# to keep on running


# Is this the right way to run the python program forever?
# And do I even need this time.sleep call?
while True:
    time.sleep(5)

Gibt es einen besseren Weg, dies zu tun? Oder muss ich überhaupt time.sleep anrufen? Irgendwelche Gedanken?

47
user2467545

Ja, Sie können eine _while True:_ -Schleife verwenden, die niemals unterbrochen wird, um fortlaufend Python Code auszuführen.

Sie müssen jedoch den Code, den Sie fortlaufend ausführen möchten , in die Schleife einfügen :

_#!/usr/bin/python

while True:
    # some python code that I want 
    # to keep on running
_

Außerdem wird time.sleep verwendet, um die Ausführung eines Skripts für einen bestimmten Zeitraum auszusetzen . Ich verstehe nicht, warum Sie es verwenden sollten, da Sie möchten, dass Ihr System kontinuierlich ausgeführt wird.

75
iCodez

Wie wäre es mit diesem?

import signal
signal.pause()

Dadurch wird Ihr Programm in den Ruhezustand versetzt, bis es ein Signal von einem anderen Prozess (oder von sich selbst in einem anderen Thread) empfängt. Dadurch wird es Zeit, etwas zu tun.

26
roarsneer

für Betriebssysteme, die select unterstützen:

import select

# your code

select.select([], [], [])
4
gnr

Hier ist die vollständige Syntax, 

#!/usr/bin/python3

import time 

def your_function():
    print("Hello, World")

while True:
    your_function()
    time.sleep(10) #make function to sleep for 10 seconds
2
Balaji.J.B

schlaf ist ein guter Weg, um eine Überlastung der CPU zu vermeiden

ich bin mir nicht sicher, ob es wirklich klug ist, aber ich benutze es normalerweise

while(not sleep(5)):
    #code to execute

die Schlafmethode gibt immer "Keine" zurück.

1
Porunga

Der gesamte obige Code wird Ihnen sicherlich dabei helfen, Ihren Code unendlich auszuführen, wenn Sie ihn jedoch mit Nohup im Hintergrund ausführen möchten.

Nohup pythonScript.py
1
Robins.Deepak

Ich habe ein kleines Skript interruptableloop.py, das den Code in einem Intervall (Standardeinstellung 1 Sekunde) ausführt, eine Meldung an den Bildschirm abgibt, während er läuft, und ein Interrupt-Signal abfängt, das Sie mit CTL-C senden können:

#!/usr/bin/python3
from interruptableLoop import InterruptableLoop

loop=InterruptableLoop(intervalSecs=1) # redundant argument
while loop.ShouldContinue():
   # some python code that I want 
   # to keep on running
   pass

Wenn Sie das Skript ausführen und es dann unterbrechen, sehen Sie diese Ausgabe (die Perioden werden bei jedem Durchlauf der Schleife ausgeblendet):

[py36]$ ./interruptexample.py
CTL-C to stop   (or $kill -s SIGINT pid)
......^C
Exiting at  2018-07-28 14:58:40.359331

interruptableLoop.py :

"""
    Use to create a permanent loop that can be stopped ...

    ... from same terminal where process was started and is running in foreground: 
        CTL-C

    ... from same user account but through a different terminal 
        $ kill -2 <pid> 
        or $ kill -s SIGINT <pid>

"""
import signal
import time
from datetime import datetime as dtt
__all__=["InterruptableLoop",]
class InterruptableLoop:
    def __init__(self,intervalSecs=1,printStatus=True):
        self.intervalSecs=intervalSecs
        self.shouldContinue=True
        self.printStatus=printStatus
        self.interrupted=False
        if self.printStatus:
            print ("CTL-C to stop\t(or $kill -s SIGINT pid)")
        signal.signal(signal.SIGINT, self._StopRunning)
        signal.signal(signal.SIGQUIT, self._Abort)
        signal.signal(signal.SIGTERM, self._Abort)

    def _StopRunning(self, signal, frame):
        self.shouldContinue = False

    def _Abort(self, signal, frame):
        raise 

    def ShouldContinue(self):
        time.sleep(self.intervalSecs)
        if self.shouldContinue and self.printStatus: 
            print( ".",end="",flush=True)
        Elif not self.shouldContinue and self.printStatus:
            print ("Exiting at ",dtt.now())
        return self.shouldContinue
0
Riaz Rizvi