@tiger_13

Как реализовать вызов одной и той же функции через n секунд?

Есть написанный сервер на aiohttp web.

Сервер является посредником между бд и мобильными приложениями. Нужно дописать обновление, чтобы сервер через каждые n секунд заходил на определенную веб страницу, и при выполнении определенных условий вызывал еще одну функцию. При этом он и дальше должен принимать запросы от мобильных.

Я реализовал эту идею следующим путем:

from aiohttp import web
import json
import aiopg
import logging
import os



async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)

async def function2():
    #работа с бд
    pass

async def checkfile():
    # скачиваем и проверяем файл
    if #условие:
        await function2()
    asyncio.sleep(5)
    checkfile()


server = web.Application()
server.add_routes([web.get('/', handle)#другие пути и функции])

await checkfile()

if __name__ == '__main__':
    web.run_app(server,port=os.environ['PORT'])


Или я придумал неправильное решение задачи? Помогите, пожалуйста, реализовать задачу. Заранее благодарю каждого!
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ответы на вопрос 1
@tiger_13 Автор вопроса
Если кому будет полезно - решение задачи, учитывая ответ Dr.Bacon
from aiohttp import web
import json
import asyncio
import logging
import os



async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)



async def checkfile():
    while True:
        print("ho! ho! ho!")
        await asyncio.sleep(5)




async def on_startup(app):
    app.loop.create_task(checkfile())
    pass


server = web.Application()
server.on_startup.append(on_startup)
server.add_routes([web.get('/', handle)])



if __name__ == '__main__':
    web.run_app(server,port=8888)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы