Index: tests/regressiontests/sites_framework/tests.py
===================================================================
--- tests/regressiontests/sites_framework/tests.py	(revision 16549)
+++ tests/regressiontests/sites_framework/tests.py	(working copy)
@@ -1,3 +1,6 @@
+import time
+from multiprocessing import Process, Queue
+
 from django.conf import settings
 from django.contrib.sites.models import Site
 from django.test import TestCase
@@ -32,3 +35,35 @@
     def test_invalid_field_type(self):
         article = ConfusedArticle.objects.create(title="More Bad News!", site=settings.SITE_ID)
         self.assertRaises(TypeError, ConfusedArticle.on_site.all)
+    
+    def test_multiprocess(self):
+        def first_process(q):
+            from django.contrib.sites.models import Site
+            s = Site.objects.get_current()
+            first_try = s.domain
+            time.sleep(2)
+            s2 = Site.objects.get_current()
+            second_try = s2.domain
+            are_equals = (first_try == second_try)
+            q.put([are_equals])
+
+        def second_process(q):
+            from django.contrib.sites.models import Site
+            s = Site.objects.get_current()
+            time.sleep(1)
+            s.domain = s.domain+'_changed'
+            s.save()
+
+        q = Queue()
+        p1 = Process(target=first_process, args=(q,))
+        p2 = Process(target=second_process, args=(q,))
+        try:
+            p1.start()
+            p2.start()
+            p1.join()
+            p2.join()
+        except:
+            p1.terminate()
+            p2.terminate()
+        self.assertFalse(q.get()[0])
+        q.close()
Index: django/contrib/sites/models.py
===================================================================
--- django/contrib/sites/models.py	(revision 16549)
+++ django/contrib/sites/models.py	(working copy)
@@ -1,10 +1,8 @@
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
+from django.core.cache import cache
 
 
-SITE_CACHE = {}
-
-
 class SiteManager(models.Manager):
 
     def get_current(self):
@@ -19,17 +17,17 @@
         except AttributeError:
             from django.core.exceptions import ImproperlyConfigured
             raise ImproperlyConfigured("You're using the Django \"sites framework\" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting to fix this error.")
-        try:
-            current_site = SITE_CACHE[sid]
-        except KeyError:
+
+        current_site = cache.get('site-cache-%s' % sid)
+        if current_site is None:
             current_site = self.get(pk=sid)
-            SITE_CACHE[sid] = current_site
+            cache.set('site-cache-%s' % sid, current_site)
         return current_site
 
     def clear_cache(self):
         """Clears the ``Site`` object cache."""
-        global SITE_CACHE
-        SITE_CACHE = {}
+        for s in self.all():
+            cache.delete('site-cache-%s' % s.id)
 
 
 class Site(models.Model):
@@ -50,16 +48,12 @@
     def save(self, *args, **kwargs):
         super(Site, self).save(*args, **kwargs)
         # Cached information will likely be incorrect now.
-        if self.id in SITE_CACHE:
-            del SITE_CACHE[self.id]
+        cache.delete('site-cache-%s' % self.id)
 
     def delete(self):
         pk = self.pk
         super(Site, self).delete()
-        try:
-            del SITE_CACHE[pk]
-        except KeyError:
-            pass
+        cache.delete('site-cache-%s' % self.id)
 
 
 class RequestSite(object):
