2016-04-18 5 views
2

Ich möchte eine Computersimulation, die auf einem Hintergrundprozess läuft (angefangen mit redis rq), wo ich den aktuellen Zustand abfragen und Parameter mit Django ändern kann.Informationen aus lang andauerndem Hintergrundprozess in Django erhalten

Aus Gründen der Einfachheit: Lassen Sie uns sagen, dass ich den folgenden Code für eine lange Zeit ausgeführt werden soll (was ich durch eine Python Arbeiter-Set würde):

def simulation(a=1): 
    value = 0 
    while a != None:  
      value += a 
      time.sleep(5) 

Dann wird durch eine URL besuchen, es würde mir den aktuellen Wert von value sagen. Ich könnte auch an eine URL POST, um den Wert a, d. H. a=None, um die Simulation zu stoppen oder a=-10, um das Verhalten zu ändern.

Was ist der beste Weg, dies zu tun?

+0

Für mich hört sich das nach einer eher primär meinungsbezogenen Frage an, aber ich würde vorschlagen, wenn Sie bereits mit python-rq vertraut sind. das könnte man wohl auch mit reinem redispy machen. – e4c5

+0

Hi @ e4c5, du hast recht, es hat so angefangen. Ich frage mich nur, ob es eine Technik gab, die Leute benutzten, von denen ich nichts wusste. Es scheint, als ob meine Versuche gescheitert sind, sind Ihnen andere Möglichkeiten bekannt, dies zu erreichen? – Ben

+0

Ich habe dieses Problem mehr als einmal gelöst, indem ich redis.lpush() und redis.rpop() verwendet habe, die einfachste Art, die ich kenne – e4c5

Antwort

0

Der beste Weg, die ich gefunden habe, dies zu tun Cache

from django.core.cache import cache 

def simulation(a=1): 
    value = 0 
    while a != None:  
      value += a 
      cache.set('value', value, 3600) 
      time.sleep(5) 
      a = cache.get('a', None) 

Das funktioniert verwendet, aber es ist ganz für meine Bedürfnisse langsam. Vielleicht gibt es eine Methode, Sockets zu verwenden, aber ich war nicht in der Lage, es zur Arbeit zu bringen. Der Socket ist im Hintergrund blockiert.

Verwandte Themen