簡體   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