我经常看到这个问题,但我对答案并不满意。我知道像 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)
有一个非 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)
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |