Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为可处理多个用户的Flask后端创建队列_Python_Reactjs_Flask - Fatal编程技术网

Python 为可处理多个用户的Flask后端创建队列

Python 为可处理多个用户的Flask后端创建队列,python,reactjs,flask,Python,Reactjs,Flask,我正在创建一个机器人,它有一个烧瓶和React(在raspberry pi zero上运行)界面,用户可以请求它执行任务。当用户请求任务时,我希望后端将其放入队列,并让后端不断查看队列并逐个处理。每项任务可能需要15-60秒,因此相当长 目前,我只是在运行Flask服务器的同一个python进程中立即执行该任务,从本地测试来看,我似乎可以在两个不同的浏览器中转到react应用程序,同时请求任务,而raspberry pi似乎正在尝试并行运行它们(从打印的日志中可以看到) 允许多个用户进入前端并排

我正在创建一个机器人,它有一个烧瓶和React(在raspberry pi zero上运行)界面,用户可以请求它执行任务。当用户请求任务时,我希望后端将其放入队列,并让后端不断查看队列并逐个处理。每项任务可能需要15-60秒,因此相当长

目前,我只是在运行Flask服务器的同一个python进程中立即执行该任务,从本地测试来看,我似乎可以在两个不同的浏览器中转到react应用程序,同时请求任务,而raspberry pi似乎正在尝试并行运行它们(从打印的日志中可以看到)


允许多个用户进入前端并排队完成任务的最佳方式是什么?当多个用户访问react应用程序时,我假设他们都连接到后端的同一个实例。因此,只需向后端添加一个出列并使用互斥锁保护它就足够了(使用互斥锁的pythonic方式是什么?)。还是这太简单了?我是否需要其他进程或方法来实现任务队列(例如写入/读取外部文件以充当队列)?

通常,Python中运行任务的最常用方法是使用。它是一个Python框架,在单独的进程上运行,不断检查队列(如Redis或AMQP)中的任务。当它找到一个时,就会执行它,并将结果记录到“结果后端”(类似于数据库或Redis)。然后让Flask服务器将任务推送到队列中

为了通知用户,您可以使用React应用程序的轮询,该应用程序每5秒请求一次更新,直到您从结果后端看到任务已成功完成。一旦您看到,停止轮询并向用户显示通知


如果应用程序变得足够大,需要它,您可以轻松地让多个工作进程并行运行。一般来说,您只需要记住让每个进程都做它需要做的事情:Flask服务器应该回答web请求,芹菜服务器应该处理任务。而不是相反。

一般来说,在Python中运行任务最流行的方法是使用。它是一个Python框架,在单独的进程上运行,不断检查队列(如Redis或AMQP)中的任务。当它找到一个时,就会执行它,并将结果记录到“结果后端”(类似于数据库或Redis)。然后让Flask服务器将任务推送到队列中

为了通知用户,您可以使用React应用程序的轮询,该应用程序每5秒请求一次更新,直到您从结果后端看到任务已成功完成。一旦您看到,停止轮询并向用户显示通知

如果应用程序变得足够大,需要它,您可以轻松地让多个工作进程并行运行。一般来说,您只需要记住让每个进程都做它需要做的事情:Flask服务器应该回答web请求,芹菜服务器应该处理任务。而不是相反