@Klaud111

Как запустить функцию и не дожидаясь ее завершения продолжить работу основной программы?

Суть такая, есть скрипт, использующий Flask, в функции main(), при определенном условии запускается функция function(). Мне нужно, чтобы при вызове эта функция начала работу, но при этом функция main вернула значение value не дожидаясь завершения function(). Я так понял, нужно асинхронное программирование использовать. Пытался использовать asyncio, но мне не помогло.

import ...
app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG)
@app.route("/", methods=['POST', 'GET'])
def main():
	
	value = a + b
        if value >=2:
                fucntion()
	return value

app.run()
  • Вопрос задан
  • 774 просмотра
Решения вопроса 1
@pcdesign
Если делать по-человечески, то конечно Celery.

Но если вы не хотите с Celery городить огород и вам главное запустить фукнцию, то вы можете вынести ее в отдельный файл и запустить его через subprocess

Для примера два файла положите их рядом.
run.py
from flask import Flask
import subprocess

app = Flask(__name__)


@app.route("/")
def main():
    subprocess.Popen('python mysleep.py', shell=True, executable='/bin/bash')
    return "Hello"


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')


mysleep.py
import time

time.sleep(10)
print("zzzzzzzzzzzz")
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Flask спроектирован однопоточным и синхронным, использование многопоточности или асинхронности может привести к проблемам. Используйте Celery и тому подобное.
Ответ написан
Ваш ответ на вопрос

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

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