Sperren eines spezifischen Objekts in Python, zur Vermeidung von Race Conditions
Verfasst: Sonntag 22. Mai 2016, 13:49
Hallo zusammen,
Ich versuche eine API für Roboter in Python zu programmieren. Jeder Roboter kann eine Menge von Motor Objekten erzeugen, welche in einer Klasse, Motor, implementiert sind. Zum agieren beinhalten sie die Funktion moveMotor, welche in einem Thread ausgeführt werden soll:
Mein Problem ist, dass ich keine Möglichkeit finde, einen Lock oder eine Semaphore zu programmieren, die den Thread nur dann ausführen, wenn ein Motor nicht aktiv ist. Also wenn Motor 1 aktiv ist, kann Motor 2 ausgeführt werden, aber nicht Motor 1.
Ich habe es mit lock = threading.Lock() und lock = threading.Semaphore() versucht und acquire und release an nahezu jeder Stelle, die mir sinnvoll erschien, ausprobiert, aber es nützt nichts.
Ich hoffe jemand kann mir helfen.
Ich versuche eine API für Roboter in Python zu programmieren. Jeder Roboter kann eine Menge von Motor Objekten erzeugen, welche in einer Klasse, Motor, implementiert sind. Zum agieren beinhalten sie die Funktion moveMotor, welche in einem Thread ausgeführt werden soll:
Code: Alles auswählen
""" Motor Class """
class Motor:
def __init__(self, motor_id):
"""
@param motor_id: Motor Identity
@type motor_id: int
"""
self.__motor_id = motor_id
self.__motorState = "r"
def moveMotor(self):
thread = MotorThread(self)
thread.start()
def run(self):
print("Motor starts...")
i = 0
while(i < 3):
print("Wrrrmmmmmmmmmm")
time.sleep(1)
i+=1
Ich habe es mit lock = threading.Lock() und lock = threading.Semaphore() versucht und acquire und release an nahezu jeder Stelle, die mir sinnvoll erschien, ausprobiert, aber es nützt nichts.
Ich hoffe jemand kann mir helfen.