例如:
async def first_route(request):
......
async def second_route(request):
......
async def functionToSchedule():
......
if __name__ == '__main__':
app = web.Application()
app.router.add_get('/fr', first_route)
app.router.add_post('/sr', second_route)
web.run_app(app)
我无法理解,我如何添加任务以每天在
functionToSchedule
运行00:00
。
如果我使用简单的schedule
库,我不能在web.run_app(app)
之后粘贴函数调用
我假设您知道如何编写一个将在每天 00:00 运行的函数(并且您知道根据您的应用程序负载,这个时间可能不准确),所以我将专注于添加任务。
更直接的是基于这样一个事实,即您可以将循环参数传递给
web.run_app(app, loop=loop)
并在此之前对其进行处理。所以它会是这样的:
if __name__ == '__main__':
app = web.Application()
app.router.add_get('/fr', first_route)
app.router.add_post('/sr', second_route)
# get the loop and add a task
loop = asyncio.get_event_loop()
loop.create_task(function_to_schedule())
# pass the loop to run_app
web.run_app(app, loop=loop)
这是官方aiohttp文档中建议的是这样使用
app.cleanup_ctx
(文档中有一个示例):
async def background_tasks(app):
app['function_to_schedule'] = asyncio.create_task(
function_to_schedule()
)
yield
app['function_to_schedule'].cancel()
await app['function_to_schedule']
if __name__ == '__main__':
app = web.Application()
app.router.add_get('/fr', first_route)
app.router.add_post('/sr', second_route)
app.cleanup_ctx.append(background_tasks)
web.run_app(app)