Как запустить программу 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
?
Любые мысли?
Ответы
Ответ 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.