繁体   English   中英

如何保持python进程存活-正确的方法

[英]How to keep python process alive - the right way

我经常看到这个问题,但对答案不满意。 我知道像Django和Flask / Werkzeug这样的服务器程序都有startserver / run方法,该方法可以使进程保持活动状态,直到收到停止信号为止。

我想实现类似的功能,但是我不知道该怎么做。 我认为永恒循环是一种不好的方法,因为它浪费了处理时间。 我宁愿不使用第三方库。

我的程序必须保持活动状态才能等待回调,与服务器通信,监视其内部状态等。

伪代码:

import ...

class Main():
    def __init__():
        self.sensors = sensors.register()
        self.database = remote.connect()
        self.running = True

    def start():
    """ this is what I assume is bad """
        while self.running:
            pass

    def stop():
        self.running = False
        self.cleanup()

    def cleanup():
        self.database.disconnect()
        self.sensors.unregister()

有一个不特定于python的通用范例来处理这种情况,称为事件循环。 如果在Internet上搜索它,将会发现几个实现它的库。 如果您使用asyncio ,则它不需要python3附带的第三方库。 我建议您熟悉一下这个概念,网络上有很多例子。 参见教程。 我们从那里得到这个例子:

import asyncio

async def work():
    while True:
        await asyncio.sleep(1)
        print("Task Executed")

loop = asyncio.get_event_loop()
try:
    asyncio.ensure_future(work())
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    print("Closing Loop")
    loop.close()

我希望这有帮助。

你可以:

import time
time.sleep(x) #seconds

并且仅以所需的时间间隔检查状态。

对于网络事件,可以使用套接字。 https://python-socketio.readthedocs.io/en/latest/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM