2010-12-29 4 views
0

Ich habe ein Objekt, das eine Aktion ausführen soll, und dann für 1 Sekunde schlafen, bevor Sie die Aktion erneut ausführen. Das Objekt verfügt jedoch über Variablen, auf die jederzeit zugegriffen werden muss, unabhängig davon, ob es sich in seiner Ein-Sekunden-Schlafperiode befindet. Wird die Ausführung des Objekts ausgesetzt, sind die Variablen nicht zugänglich?Verhindert Sleep() in Python den Zugriff auf die Variablen eines Objekts?

Dies ist Python.

Danke.

EDIT 1: Klärende 'unzugänglich':

Objekt A hat Variable x, die Objekt-B wiederholt zugreifen muss. Objekt A schläft für 1 Sekunde. Wird es ein Problem geben, wenn Objekt B versucht, x zu verwenden, während A schläft?

EDIT 2: vergessen die beiden Objekte ausgeführt werden als einzelne Prozesse zu erwähnen (I Prozesse bin mit der GIL vermeiden) 3

EDIT:

class QueueController(Process): 
    def __init__(self): 
     Process.__init__(self) 
     self.queue_stream = Queue() 
     self.queue_language = Queue() 
     self.queue_expander = Queue() 
     self.queue_feature = Queue() 
     self.queue_classify = Queue() 
     self.db = connect_to_db() 

    def run(self): 
     # Every second, allow 10 more tweets from the raw_tweets db 
     # enter the queue_stream to be processed 
     value = 0 
     while True: 
      for i in db.raw_tweets.find().skip(value).limit(30): 
       self.queue_stream.put(i) 
       value+=30 
       sleep(1) 

Will eine andere Aufgabe, die diesen verwendet Die QueueController-Klasse kann immer noch die 'queues_'-Variablen verwenden, selbst wenn sie für eine Sekunde schläft. Ich befürchte, dass das Sleeping die Ausführung stoppt, aber auch der Zugriff auf diese queue_-Variablen als Nebeneffekt.

+2

Wo ist das Objekt zugegriffen von? – alexn

+0

Parse Fehler, Redo von Anfang an - was bedeutet "unzugänglich" sogar? –

+5

Objekte schlafen nicht, Gewinde tun. –

Antwort

11

time.sleep() gibt die GIL frei, damit andere Threads ausgeführt werden können.

Der Grund, warum ich diese Antwort gebe, anstatt die von Ihnen gestellte Frage zu beantworten, ist, dass die Frage, die Sie gestellt haben, keinen Sinn ergibt. Kein Zugriff wird jemals verhindert, außer dass andere Threads ausgeführt werden können.

1

Nie viel auf Python berührt, aber immer noch denke ich, ich kenne die Antwort. Die Sache ist: Gibt es irgendwelche anderen Threads als Main? Wenn die Antwort ja ist, dann sind sie zugänglich (achten Sie auf Rennbedingungen hier), da ein Thread schlafen gehen kann, aber die anderen noch aktiv sind. Wenn Sie keine anderen Threads haben, können Sie nicht viel tun, da der Haupt-Thread schläft, so dass nicht viel passieren wird.

EDIT:

Objekt A hat Variable x, die Objekt-B wiederholt zugreifen muss. Objekt A schläft für 1 Sekunde. Wird es ein Problem geben, wenn Objekt B versucht, x zu verwenden, während A schläft?

Wie jemand bereits gesagt hat, gehen Objekte nicht schlafen, Threads tun. Also, wenn Sie Objekt B in einem anderen Thread haben und A in den Ruhezustand wechseln, können Sie von B aus auf A zugreifen, wenn nicht, der Hauptthread (ich nehme an, dass A im Hauptthread läuft) wird schlafen und nichts passiert. Wenn Sie Zweifel haben, was ein Thread ist, überprüfen Sie dies: http: //en.wikipedia.org/wiki/Thread_%28computer_science%29

Verwandte Themen