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

And*_*s_K 2 python python-3.x

我经常看到这个问题,但我对答案并不满意。我知道像 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()
Run Code Online (Sandbox Code Playgroud)

ilm*_*acs 5

有一个非 Python 特有的通用范式来处理这种称为事件循环的情况。如果你在互联网上搜索它,你会发现几个实现它的库。如果您使用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()
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。