time.sleep bei Python Stackless?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

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?
Benutzeravatar
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()
Bei Irgendwas wird natürlich etwas verglichen z.B zwei Zeiten, ich glaube so war das.

Schau auch mal bei folgendem Link vorbei:
http://code.google.com/p/stacklessexamp ... ssExamples
N@sty
User
Beiträge: 15
Registriert: Samstag 19. April 2008, 19:38
Wohnort: Bayern

Danke, hab dort folgendes gefunden

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()
[/code]
Leonidas
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
Antworten