Python: mehrere while schleifen gleichzeitig ausführen?

3 Antworten

Probiers evtl. mal so:

import time
from threading import Thread

class ThreadTest(Thread):
#nicht an eine Instanz gebundene Variablen
x = 0
y = 0
t = time.time()
locked = False #damit die Threads sich nicht gegenseitig interferieren
def __init__(self, i):
self.i = i #eine Instanzvariable (Zähler/Id)
Thread.__init__(self)
def run(self):
#damit wird das ganze auf ca. eine Minute Laufzeit begrenzt
while time.time() - ThreadTest.t < 60:
#blockieren, solange die Interferenzsperre aktiv ist
while ThreadTest.locked: time.sleep(0.01)
#die Interferenzsperre aktivieren
ThreadTest.locked = True
#wenn i ungerade ist
if self.i & 1 == 1:
#erhöhe die nicht instanzgebundene Variable y um die bisherige Laufzeit
ThreadTest.y += time.time() - ThreadTest.t
else:
#ansonsten erhöhe x
ThreadTest.x += time.time() - ThreadTest.t
#Ausgabe: Id x y
print self.i, ThreadTest.x, ThreadTest.y
#Interferenzsperre lösen
ThreadTest.locked = False
#ein wenig warten um die Lesbarkeit der Ausgaben zu verbessern
time.sleep(0.2)

#läuft für die Zahlen von 0 bis inklusive 4 je einmal durch
for i in range(0,5):
#erstelle eine Instanz von ThreadTest, setze die Id und starte den Thread
ThreadTest(i).start()

#jetzt nur noch warten...

IBAxhascox 
Beitragsersteller
 19.02.2017, 19:24

Danke für diesen Queue-Code doch ich habe gerade herausgefunden dass es globale variabeln gibt... Ich denke mit diesen geht es besser für mich.

0
import time
from threading import Thread
x = 1
def testthread1(i):
while True:
x = time.time()
x = x + 1
print x, "\n"
def testthread2(j) :
while True:
y = x
z = x
print "thread 2\n"
time.sleep(1)
i = 1
j = 1
xyz = Thread(target=testthread2(j))
print "0"
print "1"
xyz = Thread(target=testthread1(i))
print "2"
i = 2

des ghet auch nicht ._.