Почему асинхронный цикл на питоне блокирует дальнейшее выполнение программы?
async def cycle():
while True:
try:
get_info()
await asyncio.sleep(60)
except Exception as e:
print(f"Ошибка цикла: {e}")
if __name__ == '__main__':
from flask import Flask, jsonify, render_template, abort, request
app = Flask(__name__)
@app.route('/crypto_info')
def top_status():
return get_info()
# asyncio.create_task(cycle()) # Запускаем цикл как отдельный таск
@app.route('/')
def index():
return render_template('index.html') # Используйте render_template
app.run(debug=False, host='0.0.0.0') Запуск цикла раскоментирован, просто ответы только один раз дают редактировать вопрос.
import asyncio
from threading import Thread
from flask import Flask, render_template
app = Flask(__name__)
async def cycle():
while True:
try:
get_info()
await asyncio.sleep(60)
except Exception as e:
print(f"Ошибка цикла: {e}")
def start_async_loop(loop):
asyncio.set_event_loop(loop)
loop.run_forever()
if __name__ == '__main__':
loop = asyncio.new_event_loop()
t = Thread(target=start_async_loop, args=(loop,))
t.start()
asyncio.run_coroutine_threadsafe(cycle(), loop)
@app.route('/info')
def top_status():
return get_info()
@app.route('/')
def index():
return render_template('index.html')
app.run(debug=False, host='0.0.0.0')
Огромная благодарность!!! А почему ассинхрон так сложно заводиться на питоне? На JS к примеру это без танцев делается просто добавлением перед функцией async. А тут целое шаманство.
Потому что для таких фокусов нужен асинхронный сервер, например: pip install uvicorn
Асинхронный цикл в Python может блокировать выполнение программы, если он не корректно управляет контролем выполнения. В вашем коде функция get_info() вызывается без использования await, что приводит к блокировке выполнения других задач в цикле событий asyncio. Это происходит потому, что синхронные функции не позволяют другим асинхронным задачам выполняться, пока они не завершатся.
Чтобы избежать блокировок, убедитесь, что все вызовы функций, которые могут занять время, являются асинхронными и используют await.
Еще мне говорят что я вопросы странные задаю
фурри