如何同步处理Flask请求

How to process Flask requests synchronously

我正在尝试创建一个 Flask API,它将接收多个 HTTP GET 请求并按照接收到的顺序一个一个地处理它们。

GET 请求调用的子程序是一个 pywinauto 程序,因此一次只调用它的一个实例很重要。

我试过使用 Celery + RabbitMQ 和普通 python 队列。

我在想某种队列是可行的方法,但到目前为止我所做的一切都导致请求被同时处理。

任何指导都会有所帮助。

我的 Celery 任务路线

@app.route('/ClientEntry', methods=['GET'])
def createClient():
    crmid = request.args.get('crmid')
    if crmid:
        result = inputClient.apply(args=[crmid])
        print('inside '+ result.get(timeout=120))
        return json.dumps({'success':True}), 200, {'ContentType':'application/json'} 
    else: 
        raise BadRequest('CRM ID cannot be empty')

我的 Celery tasks.py(运行 在 Windows 环境中,因此必须手动设置 FORKED_BY_MULTIPROCESSING 变量)

from celery import Celery
import os
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '0') #tried both 0 and 1
os.environ.setdefault('CELERY_ALWAYS_EAGER', 'True') #tried both with and without this, 'True', 'False', '0', and '1'
app = Celery('tasks', backend='rpc://', broker='amqp://guest@localhost')

@app.task
def inputClient(crmid):
    uiInputClient(crmid)

启动 celery worker 时将 CELERYD_CONCURRENCY 设置为 1 并且只启动一个 worker。这将使一次只运行一个任务。

有关详细信息,请查看 celery docs