Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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中的多线程Falcon_Python_Multithreading_Falconframework - Fatal编程技术网

Python中的多线程Falcon

Python中的多线程Falcon,python,multithreading,falconframework,Python,Multithreading,Falconframework,我正在使用为应用程序创建RESTAPI。在不同端点上启动两个或多个对API的请求时,没有多线程执行(必须完成一个请求才能执行下一个请求) 问题来自一个POST端点,它执行一个复杂的机器学习过程(需要十几秒才能完成),而整个API在执行过程时被阻塞,因为它等待过程完成以返回一些结果 我正在使用wsgiref simple_server为请求提供服务: if __name__ == '__main__': httpd = simple_server.make_server('127.0.0.

我正在使用为应用程序创建RESTAPI。在不同端点上启动两个或多个对API的请求时,没有多线程执行(必须完成一个请求才能执行下一个请求)

问题来自一个POST端点,它执行一个复杂的机器学习过程(需要十几秒才能完成),而整个API在执行过程时被阻塞,因为它等待过程完成以返回一些结果

我正在使用wsgiref simple_server为请求提供服务:

if __name__ == '__main__':
    httpd = simple_server.make_server('127.0.0.1', 8000, app)
    httpd.serve_forever()

有没有办法使执行并行,以便同时为多个请求提供服务。

可能服务器没有在多进程或多线程模式下运行

但是,即使是这样,为长时间运行的任务占用web服务器也不是一个好主意。长时间运行的任务应该由其他一些辅助进程运行

查看一下

理想情况下,您应该如上所述使用,但如果必须为API请求返回结果,则可以使用

在这里,在上面的代码中,我提到了3个工人,因此您可以一次处理3个请求

理想情况下,没有任何一个工人可以被解雇

cpu_计数*2+1

您可以使用任何您喜欢的端口号,但请确保该端口号大于1024,并且不被任何其他程序使用

main:app选项告诉Gunicorn调用main.py文件中可用的应用程序对象app

Gunicorn提供了一个可选的--reload开关,告诉Gunicorn动态检测任何代码更改。通过这种方式,您可以更改代码,而无需重新启动Gunicorn

如果这种方法不适合你的需要,我认为你应该用它来代替


如果需要进一步澄清,请告诉我。

这可以通过将Falcon与。有了Gunicorn,实现多线程/多处理将相对容易,而不需要实现芹菜(尽管没有什么可以阻止实现芹菜。芹菜真是太棒了!)

上面的命令将启动3个worker,每个worker有3个线程。作为开发人员,您可以调整所需的工作线程数。我强烈建议在调整这些设置之前了解多线程和多处理之间的区别

gunicorn --workers 3 -b localhost:8000 main:app --reload
gunicorn -b localhost:8000 main:app --threads 3 --workers 3 --reload