繁体   English   中英

在 gunicorn 工人之间共享内存中的动态数据

[英]Share dynamic data in memory between gunicorn workers

我有一个用 Django/Celery/Postgres/Gunicorn/Nginx 编写的网络应用程序。

该应用程序允许对用户进行科学模拟。 这些模拟可能需要 5 秒到 5 分钟。 常规请求和快速模拟使用标准阻塞范例完成,而长时间模拟在后台运行(有些甚至并行提交到多个 AWS Lambda 实例)由 celery 完成,然后客户端由 WebSocket 更新。

当客户登录并打开他的一个项目时,模拟对象被初始化并作为 {user:Simulation} 存储在字典中。 初始化这个 Simulation 对象大约需要 10 秒,所以它只在开始时完成。 每次用户在客户端与他的模拟交互时,特定视图都会将 Simulation 对象查询到全局 dict 并应用任何更改、检索数据、保存模拟、运行模拟等。

这种方法的问题在于它只适用于 1 个 gunicorn 工人,因为其他工人无权访问全局 dict 内的模拟对象。 此外,由于用户不断更改对象,因此无法预加载对象。

使用这种全局动态对象的最佳方法是什么,因为每个请求都太昂贵而无法重新初始化?

我想你想要一个内存缓存:

https://docs.djangoproject.com/en/2.1/topics/cache/#memcached

基本接口是set(key, value, timeout)和get(key):

>>> from django.core.cache import cache
>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM