Save task references (#475)
* Save a tast reference Important: Save a reference of the created task, to avoid a task disappearing mid-execution. The event loop only keeps weak references to tasks. A task that isn’t referenced elsewhere may get garbage collected at any time, even before it’s done. For reliable “fire-and-forget” background tasks, gather them in a collection
This commit is contained in:
@@ -218,6 +218,7 @@ app = Quart(__name__,
|
||||
static_folder='web/static')
|
||||
app.secret_key = 'JKLdks.dajlKKKdladkflKwolafallsdfl'
|
||||
app.jinja_env.globals.update(url_for=url_for)
|
||||
app.background_tasks = set()
|
||||
server = Server(app, __name__ == "__main__")
|
||||
Web(app, server.trans_path, server.rel_urls)
|
||||
|
||||
@@ -268,9 +269,13 @@ async def startup_app(): # pragma: no cover
|
||||
|
||||
for inv_class, port in [(InverterG3, 5005), (InverterG3P, 10000)]:
|
||||
logging.info(f'listen on port: {port} for inverters')
|
||||
loop.create_task(asyncio.start_server(lambda r, w, i=inv_class:
|
||||
handle_client(r, w, i),
|
||||
'0.0.0.0', port))
|
||||
task = loop.create_task(
|
||||
asyncio.start_server(lambda r, w, i=inv_class:
|
||||
handle_client(r, w, i),
|
||||
'0.0.0.0', port))
|
||||
app.background_tasks.add(task)
|
||||
task.add_done_callback(app.background_tasks.discard)
|
||||
|
||||
ProxyState.set_up(True)
|
||||
|
||||
|
||||
@@ -294,6 +299,7 @@ async def handle_shutdown(): # pragma: no cover
|
||||
await inverter.disc(True)
|
||||
|
||||
logging.info('Proxy disconnecting done')
|
||||
app.background_tasks.clear()
|
||||
|
||||
await Proxy.class_close(loop)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user