﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34276	LocMemCache not working for multiple threads	D Bersan	nobody	"I have a thread that is initialized on apps.py in a given app in django. 

This thread updates the value of a `counter` that is saved in cache, using `django.core.cache`. 

Also I have a view that returns the value of the same cache, in an endpoint:


{{{
# jobs.py
import threading
import time
from django.core.cache import cache
 
class MyThread:
  def __init__(self) -> None:
    self.t = threading.Thread(target=MyThread.myLoop, args=(self,))
    self.t.daemon = True
    self.count = 1
 
  def myLoop(self):
    while self.running:
      time.sleep(3)
      self.count += 1
      cache.set('count', self.count)
 
  def start(self):  
    self.running = True 
    self.t.start()
 
  def stop(self):
    self.running = False
 
# --------------
# apps.py
from django.apps import AppConfig
import os
 
class MyAppConfig(AppConfig):
    default_auto_field = ""django.db.models.BigAutoField""
    name = ""MyApp""
 
    def ready(self) -> None:
        from .jobs import MyThread
        t= MyThread()
 
        if os.environ.get('RUN_MAIN', None) != 'true':
            t.start()
        # return super().ready()
 
# --------------
# views.py
from django.http import JsonResponse
from django.core.cache import cache
# ... other imports
 
def getCurrentCount(request):
  global cache
  if request.method == 'GET':
    return JsonResponse({
      'count': cache.get('count')
    })
}}}

I am using (LocMemCache)[https://docs.djangoproject.com/en/4.1/topics/cache/#local-memory-caching] in settings.py:


{{{
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}
}}}

But when I try to log the result of `cache.get('count')`, it returns `None`.

The documentation clearly states: 

""This cache is **per-process** (see below) and thread-safe."" 

""Note that each process will have its own private cache instance, which means no **cross-process caching is possible**. ""

I have the impression that they meant the cache is **per-thread** , not ** per-process** . Both my threads are on the same process, so they should share the same caching, according to the documentation. It also emphasizes, **no cross-process caching is possible**. It doesn't say **no cross-threading caching is possible**. But reading other resources I found online, it seems this is not shared even among threads, so the documentation is wrong, or there is a bug in this version of Django. 

"	Bug	closed	Core (Cache system)	4.1	Normal	invalid	LocMemCache		Unreviewed	0	0	0	0	0	0
