time.sleep bei Python Stackless?
Ich versuche mit einem Tasklet in regelmäßigen Abständen die alten Sessions aus der Datenbank zu löschen. Nur wenn ich time.sleep verwende wird der gesamte Thread in den schlaf geschickt. Gibt es für stackless irgendwas ähnliches oder eine Funktion die nicht zu rechenintensiv ist und genau eine gewisse zeit braucht?
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
N@sty hat geschrieben: Nur wenn ich time.sleep verwende wird der gesamte Thread in den schlaf geschickt. Gibt es für stackless irgendwas ähnliches oder eine Funktion die nicht zu rechenintensiv ist und genau eine gewisse zeit braucht?
Code: Alles auswählen
import stackless
while Irgendwas:
stackless.schedule()
Schau auch mal bei folgendem Link vorbei:
http://code.google.com/p/stacklessexamp ... ssExamples
Danke, hab dort folgendes gefunden
[/code]
Code: Alles auswählen
#
# The normal approach to scheduling.
#
# Author: Richard Tew <richard.m.tew@gmail.com>
#
# This code was written to serve as an example of Stackless Python usage.
# Feel free to email me with any questions, comments, or suggestions for
# improvement.
#
# Benefits of this approach:
#
# - It is easy to use from the interpreter.
#
# Limitations of this approach:
#
# - If there are no tasklets that run for the life of the application
# or script then the scheduler may exit when things are not complete.
# One example of this is when all tasklets which were in the
# scheduler and did not complete are waiting on channels.
#
import time
import stackless
exitScheduler = False
sleepingTasklets = []
# Utility functions for tasklets to call.
def Sleep(secondsToWait):
""" Put the current tasklet to sleep for a number of seconds. """
channel = stackless.channel()
endTime = time.time() + secondsToWait
sleepingTasklets.append((endTime, channel))
sleepingTasklets.sort()
# Block until we get sent an awakening notification.
channel.receive()
# Scheduler running related functions.
def ManageSleepingTasklets():
""" Awaken all tasklets which are due to be awakened. """
while not exitScheduler:
while len(sleepingTasklets):
endTime = sleepingTasklets[0][0]
if endTime > time.time():
break
channel = sleepingTasklets[0][1]
del sleepingTasklets[0]
# It does not matter what we send as it is not used.
channel.send(None)
stackless.schedule()
def Run():
def Test(n):
global exitScheduler
while n:
print n, "Sleep"
Sleep(1.0)
n -= 1
exitScheduler = True
stackless.tasklet(Test)(10)
stackless.tasklet(ManageSleepingTasklets)()
# This will run until there are no scheduled tasklets. But because we
# create one to manage the sleeping tasklets this will mean it will run
# indefinitely.
stackless.run()
if __name__ == '__main__':
Run()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das ist ja mal ein hässliches Ding, mit globalen Variablen was es effektiv unbrauchbar macht wenn man in mehr als in zwei Tasklets gleichzeitig ``Sleep`` haben will. Von der Namensgebung der Objekte mal ganz zu schweigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice