threading.Timer Problem

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
studi
User
Beiträge: 25
Registriert: Montag 2. Juni 2008, 22:59

Du übergibst aber da keine Funktion als Argument sondern eine Liste - genau die die bei ``schrauber(10)``

Ja Leonidas du hast ja wie gewohnt recht. Ich muss lernen wie ein Informatiker zu denken. "Man kann sich ein buch kaufen, aber kein Wissen"

Jetz habe ich folgendes: Generiert wenigstens jede 2 Sekunden eine Liste :D

Code: Alles auswählen

import random
import threading
from timeit import Timer

def schrauber ():
    zufall = []
    number = 5
    global t
    for i in range (number):
        wert = random.randrange(0,19999)
        zufall.append (wert)
    t = threading.Timer(2.0 , schrauber)
    t.start()
    print zufall
    return zufall

zufall = schrauber()
print "Zufall ist" ,zufall

Code: Alles auswählen

[261, 19039, 1441, 1039, 9061]
Zufall ist [261, 19039, 1441, 1039, 9061]
[1726, 19229, 2464, 4964, 16206]
[1082, 18507, 9268, 16838, 10484]
Was ich nicht verstehe, die Funktion schrauber wird ja jede 2-te Sekunde aufgerufen gibt aber die Liste nur ein mal zurück. :?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Wäre es nicht auch seltsam wenn nach 2 Sekunden deine quasi Mainfunktion nochmal aufgerufen werden würde?
Nur deine Funktion wird noch einmal aufgerufen, mehr nicht.
BlackJack

@studi: *Du* rufst die Funktion nur einmal auf. Alle zwei Sekunden wird dann ein Thread gestartet, der die Funktion aufruft, aber Threads haben 1. keinen Rückgabewert und 2. wo sollte das Ergebnis auch landen!?

2. ist so ein bisschen das Problem was ich sehe: Wie willst Du auf die Werte zugreifen? Du sagst alle paar Sekunden sollen zufällige Werte erzeugt werden, aber mit denen muss doch auch irgend etwas passieren!?
studi
User
Beiträge: 25
Registriert: Montag 2. Juni 2008, 22:59

Guten Abend.
2. wo sollte das Ergebnis auch landen!?
Das Ergebnis sollte urspruenglich in einer Liste gespeichert werden, habe es auch gemacht mit einer schleife. Na ja aufjeden Fall passt es mir jetzt so. Die Werte müssen halt jetzt mit hilfe einer Normalverteilung "begradigt" werden. :shock:
Das Ziel ist ein Analyse Programm das anomalien (Fehler) erkennt und diese dann dem Benutzer meldet, hier z. B. das der Schrauber halt kaputt ist. :D

Danke fuer eure Hilfe, ich schau dann mal weiter. :wink:
Zuletzt geändert von studi am Dienstag 10. Juni 2008, 15:29, insgesamt 1-mal geändert.
BlackJack

Mit Feld meinst Du wahrscheinlich Liste. Die dürften zwar in der CPython-Implementierung "thread safe" sein, aber ich würde zur Kommunikation zwischen Threads doch eher eine `Queue.Queue` empfehlen.

Oder sollen immer nur `number` Werte gleichzeitig verfügbar sein und die alten Werte verworfen werden? Kannst Du die Werte eventuell auch erst bei der Anforderung erzeugen lassen statt ständig im Hintergrund neue Zufallszahlen zu erzeugen?
Antworten