我有一个用Django / Celery / Postgres / Gunicorn / Nginx编写的Web应用。
该应用程序允许对用户执行科学模拟。这些模拟可能需要5秒钟到5分钟。常规请求和快速模拟使用标准的阻塞范式完成,而长模拟在后台由celery在后台运行(有些甚至并行提交到多个AWS Lambda实例),然后由WebSocket更新客户端。
当客户登录并打开其项目之一时,将初始化Simulation对象并将其存储为dict中的{user:Simulation}。初始化此Simulation对象可能需要大约10秒钟,因此只能在开始时完成。每次用户在客户端与他的模拟进行交互时,特定的视图都会向Simulation对象查询全局dict,并应用所有更改,检索数据,保存模拟,运行模拟等。
此方法的问题在于,它仅对1个gunicorn工作人员有效,因为其他工作人员无法访问全局dict中的Simulation对象。而且,由于用户不断更改对象,因此无法预加载对象。
使用这种全局动态对象的最佳方法是什么,这种方法太昂贵而无法在每个请求中重新初始化?
答案 0 :(得分:1)
我认为您要在此处设置内存缓存
https://docs.djangoproject.com/en/2.1/topics/cache/#memcached
基本界面已设置(键,值,超时)和get(键):
>>> from django.core.cache import cache
>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'