[英]Enable multithreading of my web app using python Bottle framework
我有一个用Bottle框架编写的Web应用程序。 它具有一个由多个HTTP查询访问的全局脚本列表。
经过一番研究,我发现Bottle框架在1个进程模式下仅支持1个线程来运行我的应用程序(我不相信这是真的,也许将其迁移到Flask等其他框架是个好主意。)
1为了启用多线程,我找到了WSGI解决方案,但是它不支持多个进程(每个进程1个线程)像我的应用程序中的somedict一样访问全局变量,因为每次处理查询时,进程都会重新初始化列表。 我该如何处理?
2除了WSGI之外,还有其他解决方案可以解决该问题,以使该应用程序一次服务多个HTTP查询吗?
from bottle import request, route
import threading
somedict = {}
somedict_lock = threading.Lock()
@route("/read")
def read():
with somedict_lock:
return somedict
@route("/write", method="POST")
def write():
with somedict_lock:
somedict[request.forms.get("key1")] = request.forms.get("value1")
somedict[request.forms.get("key2")] = request.forms.get("value2")
最好通过gunicorn或女服务员之类的服务器来提供WSGI应用程序,这将满足您的并发需求,但是几乎无论您做什么并发,内存中的全局队列都无法按您希望的方式工作。 您需要使用外部存储器,例如memcached,redis等。静态数据是一回事,但是可变状态永远不应在Web应用程序进程之间共享。 这与Python Web服务器习惯用法和Python Web应用程序的典型执行模型相反。
我并不是说在Python中实际上是不可能的,但这不是Python解决此问题的方式。
您可以异步处理传入的请求,当前Celery似乎非常适合运行异步任务。 阅读芹菜如何做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.