我用 flask 实现了两个接口,用于操作一个字典对象,伪代码如下:
# -*- coding: utf-8 -*-
from flask import Flask, request
app = Flask(__name__)
shared_dict = dict()
@app.route("/set")
def set():
shared_dict[...] = request...
@app.route("/get")
def get():
return shared_dict[...]
直接用app.run()
这个程序没有任何问题
现在想要部署用gunicorn
+flask
的方式部署,启动参数gunicorn -w 4 main:app
我发现不同的 worker 不是共用这个shared_dict
对象,翻查了很多文档,没有找到解决办法
1
binux 2016-08-18 18:15:58 +08:00 2
设计时你就应该想好这个问题。取决于需求和访问量
1. 使用 thread worker 来跑 2. 使用外部资源共享对象,例如数据库,文件等 3. 只跑一个 worker |
3
paulw54jrn 2016-08-18 18:19:48 +08:00
这个涉及到操作系统进程的基本概念...
|
4
felixzhu 2016-08-18 18:23:22 +08:00
引入一个外部存储不就行了。开个 redis 啥的
|
6
josephok 2016-08-18 19:10:02 +08:00 via Android
需要进程间通信了。
|
7
lvhuiyang 2016-08-18 20:31:04 +08:00
redis 正解
|
8
lovepython 2016-08-19 13:34:30 +08:00
基本进程间通信的可能性不大了,因为是 gun 控制的,
一楼的回答已经是最好的答案了 |
9
wuyu1998 2016-08-20 17:16:25 +08:00
用 NoSQL 存放 shared_dict 对象的序列化字符串。
|
10
alsoran1 2018-01-29 14:07:26 +08:00
请问楼主 这个问题当时怎么解决的?有用到共享内存吗?
|