Подтвердить что ты не робот

Как запустить программу Python навсегда?

Мне нужно запустить мою программу Python навсегда в бесконечном цикле.

В настоящее время я запускаю его так:

#!/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)

Есть ли лучший способ сделать это? Или мне даже нужен вызов time.sleep? Любые мысли?

4b9b3361

Ответ 1

Да, вы можете использовать цикл while True:, который никогда не прерывается, чтобы постоянно запускать код Python.

Однако вам нужно будет поместить код, который вы хотите постоянно запускать внутри цикла:

#!/usr/bin/python

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

Кроме того, time.sleep используется для приостановки операции script в течение определенного периода времени. Итак, поскольку вы хотите, чтобы ваша работа выполнялась постоянно, я не понимаю, почему вы ее используете.

Ответ 2

Как насчет этого?

import signal
signal.pause()

Это позволит вашей программе спящий режим, пока не получит сигнал от какого-либо другого процесса (или самого себя в другом потоке), сообщив ему, что пришло время что-то сделать.

Ответ 3

для ОС, поддерживающих select:

import select

# your code

select.select([], [], [])

Ответ 4

сон - хороший способ избежать перегрузки на процессоре

не уверен, действительно ли он умный, но я обычно использую

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

метод sleep всегда возвращает None.

Ответ 5

Вот полный синтаксис,

#!/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

Ответ 6

У меня есть небольшой скрипт interruptableloop.py, который запускает код с интервалом (по умолчанию 1 сек.), Он выкачивает сообщение на экран во время его работы и прерывает сигнал прерывания, который вы можете отправить с помощью CTL-C:

#!/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

Когда вы запускаете скрипт, а затем прерываете его, вы видите этот вывод (периоды выкачиваются на каждом проходе цикла):

[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

Ответ 7

Весь вышеприведенный код, несомненно, поможет вам выполнить ваш код бесконечно, но если вы хотите запустить код в фоновом режиме с помощью nohup.

nohup pythonScript.py

Ответ 8

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

Ответ 9

Это один из единственных способов, о которых я могу думать. Что касается того, подходит ли это, это зависит от варианта использования - веб-серверы и циклы событий иногда делают это так. И нет, вам определенно не нужен вызов time.sleep.