0

У меня есть объект кеша, предназначенный для хранения переменных, разделяемых между модулями.Кэш, растущий бесконечно большой из-за параллельных потоков

Параллельные потоки получают доступ к объекту кэша &, используя обработчик кеша, который использует блокировку переменных для сохранения целостности кеша.

Кэш хранит все переменные под уникальным идентификатором сеанса. Когда создается новый идентификатор сеанса, он должен ссылаться на старый, копируя некоторые переменные в новый сеанс.

Некоторые идентификаторы сеанса также будут работать одновременно.

Мне нужно очистить кеш, как только все параллельные потоки будут сделаны, ссылаясь на него, и все новые сеансы скопировали переменные из него в их сеанс.

Проблема ...

Я не знаю, когда это безопасно, чтобы очистить кэш.

У меня есть сотни потоков, которые вызывают вызовы API переменного времени. Новые сеансы создадут новые потоки. Я не могу просто посмотреть активные потоки, чтобы определить, когда очистить кеш.

Мой кеш будет увеличиваться до бесконечного размера & в конечном итоге сбой программы.

Я считаю, что это должна быть общая проблема. И те самые умные, что у меня есть, через меня.

Любые идеи, как наилучшим образом решить эту проблему?

+0

Возможно [слабые ссылки] (https://docs.python.org/2/ библиотека/weakref.html)? В таких языках, как Java, это общее решение для этих типов проблем подсчета ссылок. –

ответ

0

Вы можете решить эту проблему с блокированием ... создать чистый нити, которая иногда блокирует кэш (принимать все замки, которые вы имеете на него) и очищает его, затем отпустите замки ...

(если у вас много блокировок для разных частей кеша, вы также можете заблокировать & очистить кеш по частям ...)