Как выполнять определённый код раз в минуту
Мне нужно чтобы код выполнялся раз в минуту, но это не получается.. Я придумал такой код но он не работает раз в минуту, а выполняется просто как обычный while очень быстро.
while True:
print('f')
asyncio.sleep(60)
Ответы (2 шт):
Автор решения: 5c0rp
→ Ссылка
Набросаю несколько вариантов
- Использование
time.sleep
from time import sleep
while True:
# do something
sleep(60)
- Использование библиотеки
schedule
# pip install schedule
def job():
print("I'm working...")
schedule.every().minute.do(job)
while True:
schedule.run_pending()
time.sleep(1)
- Использовать
celery. Для этого способа нужно дополнительно установитьrabbitmqлибоredis.
# tasks.py
from celery import Celery
from celery.schedules import crontab
app = Celery('tasks', broker='адрес брокера')
@app.task
def add(x, y):
return x + y
app.conf.beat_schedule = {
'add': {
'task': 'add',
'schedule': crontab(minute='*/1'),
}
}
Запускаем это командами celery -A tasks worker --loglevel=INFO и celery -A tasks beat --loglevel=INFO
Автор решения: Shap Po
→ Ссылка
Вы забыли добавить await перед использованием асинхронной функции:
while True:
print('f')
await asyncio.sleep(60)