我需要在无限循环中永远运行我的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
来电?
有什么想法吗?
答案 0 :(得分:75)
是的,您可以使用永不中断的while True:
循环来持续运行Python代码。
但是,您需要将要继续运行的代码放在循环中:
#!/usr/bin/python
while True:
# some python code that I want
# to keep on running
此外,time.sleep
用于暂停脚本的操作一段时间。所以,既然你希望你的不断运行,我不明白你为什么会这样做。
答案 1 :(得分:27)
这个怎么样?
import signal
signal.pause()
这会让你的程序一直处于睡眠状态,直到它收到来自其他进程(或其自身,另一个线程)的信号,让它知道是时候做某事了。
答案 2 :(得分:7)
我知道这是一个太旧的线程,但是为什么没人提到这个
#!/usr/bin/python3
import asyncio
loop = asyncio.get_event_loop()
try:
loop.run_forever()
finally:
loop.close()
答案 3 :(得分:4)
支持select
的操作系统:
import select
# your code
select.select([], [], [])
答案 4 :(得分:3)
睡眠是避免cpu过载的好方法
不确定它是否真的很聪明,但我通常使用
while(not sleep(5)):
#code to execute
sleep方法总是返回None。
答案 5 :(得分:3)
这是完整的语法,
#!/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 :(得分:0)
我有一个小脚本 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 :(得分:0)
以上所有代码无疑可以帮助您无限执行代码,但是如果您想使用nohup在后台运行代码。
nohup pythonScript.py
答案 8 :(得分:0)
如果你的意思是作为服务运行,那么你可以使用任何休息框架
from flask import Flask
class A:
def one(port):
app = Flask(__name__)
app.run(port = port)
称之为:
one(port=1001)
它会一直监听 1001
* Running on http://127.0.0.1:1001/ (Press CTRL+C to quit)
答案 9 :(得分:-1)
它是我能想到的唯一方式之一。至于它是否合适,它取决于用例 - 网络服务器和事件循环有时会这样做。不,你绝对不需要time.sleep电话。