[英]Restart a python function in a script after n minutes
我有一个脚本,它使用服务器发送的事件库与定期向我推送事件的服务器连接。 问题是 stream 会在很长一段时间后冻结,我将不得不手动重新启动脚本,这是不可维护的。 当前代码的结构如下所示
def listen(self):
print("listening to events .....")
try:
url = settings.EVENT_URL + "/v1/events"
auth_key = settings.KEY
headers = {
"Authorization": "Basic " + auth_key,
"Accept": "text/event-stream",
}
response = self.with_urllib3(url, headers)
client = sseclient.SSEClient(response)
for event in client.events():
# the script freezes here.
logger.info(event.data)
process(event.data)
我试过做类似的事情
def start(self):
def wait():
time.sleep(10 * 60)
background = threading.Thread(name = 'background', target = self.listen)
background.daemon = True
background.start()
wait()
try:
self.start()
except:
self.start()
finally:
self.start()
但我不知道这是否会起作用,主要是因为守护线程将继续在后台运行,这意味着我将在一段时间后运行任务的副本。
我需要的是一种更好的方法来调用 function 并在经过一段时间后从 function 返回并立即再次调用它。 谢谢你的帮助。
您可以考虑使用如下所示的signal
模块进行构造。 不过需要注意的是, SIGALRM
信号与 Windows 不兼容。
import signal
TIMEOUT = 5
def _handle_alarm(_, __):
raise TimeoutError("Some useful message")
def listen():
print("Starting to listen...")
import time
time.sleep(10)
while True:
try:
timer = signal.signal(signal.SIGALRM, _handle_alarm)
signal.alarm(TIMEOUT)
listen()
except TimeoutError:
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.