Wątki#
Wstęp#
Wątki pozwalają robotowi wykonywać wiele zadań jednocześnie w ramach tego samego programu. Umożliwiają one wielozadaniowość, pozwalając robotowi wykonywać niezależne czynności w tym samym czasie.
Uwaga: Aby używać funkcji z wątkiem, należy ją najpierw zdefiniować.
Konstruktor – tworzenie i uruchamianie nowych wątków.
Thread– Rozpoczyna nowy wątek, który uruchamia określoną funkcję równolegle z programem głównym.
Akcja – Kontrola uruchomionych wątków.
stop– Zatrzymuje wątek ręcznie, przydatne do zatrzymania działania w tle.
Konstruktor#
Thread#
Thread tworzy i uruchamia wątek. Podczas tworzenia wątku możesz nadać mu nazwę, aby zatrzymać go, gdy nie będzie już potrzebny.
Stosowanie:
my_thread = Thread(my_function)
Parametry |
Opis |
|---|---|
|
Opcjonalnie. Nazwa nowego wątku. |
|
Nazwa wcześniej zdefiniowanej funkcji. |
Uwaga: Funkcja musi zawsze zostać zdefiniowana przed jej wywołaniem.
def move_square():
# Move in a square path
while True:
arm.move_inc(100, 0, 0)
arm.move_inc(0, 100, 0)
arm.move_inc(-100, 0, 0)
arm.move_inc(0, 100, 0)
move_square_thread = Thread(move_square)
signal_tower.set_color(SignalTower.BLUE, SignalTower.BLINK)
# Run multiple threads simultaneously
def move_square():
# Move in a square path
while True:
arm.move_inc(100, 0, 0)
arm.move_inc(0, 100, 0)
arm.move_inc(-100, 0, 0)
arm.move_inc(0, 100, 0)
def lights():
while True:
# Turn on all LEDs
signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
wait(0.25, SECONDS)
# Turn on just the red LED
signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
wait(0.25, SECONDS)
move_square_thread = Thread(move_square)
lights_thread = Thread(lights)
Działanie#
stop#
stop zatrzymuje wątek ręcznie, co jest przydatne, gdy zadanie nie jest już potrzebne lub gdy program wymaga zresetowania wątków. Po zatrzymaniu wątku nie można go ponownie uruchomić. Aby go ponownie uruchomić, należy utworzyć nowy wątek za pomocą Thread.
Stosowanie:
my_thread.stop()
Parametry |
Opis |
|---|---|
|
Wcześniej uruchomiony obiekt wątku. Jest to nazwa przypisana podczas tworzenia wątku przy użyciu |
"""
Run multiple threads simultaneously
Move the end effector, flash lights and display the x position at once
Stop blinking after 2 seconds
"""
def lights():
while True:
# Turn on all LEDs
signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
wait(0.25, SECONDS)
# Turn on just the red LED
signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
wait(0.25, SECONDS)
def display_x():
while True:
brain.clear_row()
brain.set_cursor(1, 1)
brain.print("X Position: {}".format(arm.get_x()))
wait(50, MSEC)
lights_thread = Thread(lights)
display_x_thread = Thread(display_x)
arm.move_to(200, 140, 210)
wait(2, SECONDS)
lights_thread.stop()