Asynchronous 如何在Flask/gunicorn/gevent中启动异步函数?

Asynchronous 如何在Flask/gunicorn/gevent中启动异步函数?,asynchronous,flask,gunicorn,python-3.7,gevent,Asynchronous,Flask,Gunicorn,Python 3.7,Gevent,我目前有一个烧瓶申请 from flask import Flask import time app = Flask(__name__) @app.route('/') def foobar_view(): long_running() # TODO: Just trigger this; don't wait for completion return 'Done!' def long_running(): print('long_running:start

我目前有一个烧瓶申请

from flask import Flask
import time

app = Flask(__name__)


@app.route('/')
def foobar_view():
    long_running()  # TODO: Just trigger this; don't wait for completion
    return 'Done!'


def long_running():
    print('long_running:start')
    time.sleep(100)
    print('long_running:end')


app.run(host='localhost', port=5000)
开始于

gunicorn --worker-class=gevent \
         --worker-connections=1000 \
         --bind 0.0.0.0:5000 my_app.app:app \
         --workers=4 \
         --timeout 120 \
         --keep-alive 120
应用程序的负载不会很重,并且该
长时间运行的功能很少会被触发。我正在寻找一种简单的方法来运行它,我愿意接受有关gunicorn/gevent的更改。我正在使用Python 3.7


如何使
长时间运行
异步执行?

解决方案可以是在线程中运行int:

from flask import Flask
import time
from threading import Thread

app = Flask(__name__)


@app.route('/')
def foobar_view():
    Thread(target=async_long_running, args=(app, 'works')).start()
    return 'Done!'


def async_long_running(app, msg):
    with app.app_context():
        long_running(msg)

def long_running(foo):
    print('long_running:start:{}'.format(foo))
    time.sleep(100)
    print('long_running:end')


app.run(host='localhost', port=5000)

我也是。我通常更喜欢像芹菜这样的求职者,但在这种情况下我需要一些轻量级的,IIRC