Теми#
Вступ#
Потоки дозволяють роботу виконувати кілька завдань одночасно в одній програмі. Вони забезпечують багатозадачність, дозволяючи роботу виконувати незалежні дії одночасно.
Примітка: Ви повинні спочатку визначити функцію, щоб використовувати її з потоком.
Конструктор – Створення та початок нових потоків.
Thread– Запускає новий потік, який виконує вказану функцію паралельно з основною програмою.
Дія – Керування запущеними потоками.
stop– Зупиняє потік вручну, корисно для зупинки фонової поведінки.
Конструктор#
Thread#
Thread створює та запускає потік. Під час створення потоку ви можете дати йому назву, щоб зупинити його, коли він більше не потрібен.
Використання:
my_thread = Thread(my_function)
Параметри |
Опис |
|---|---|
|
Необов’язково. Назва для нового потоку. |
|
Ім’я раніше визначеної функції. |
Примітка: Функцію завжди потрібно визначити перед її викликом.
# Drive forward while blinking lights
def blink_lights():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLUE)
wait(0.5, SECONDS)
blink_lights_thread = Thread(blink_lights)
robot.move_at(0)
# Run multiple threads simultaneously
# Turn right, blink lights and display heading at once
def blink_lights():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, GREEN)
wait(0.5, SECONDS)
def display_heading():
while True:
robot.screen.clear_row()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
wait(50, MSEC)
blink_lights_thread = Thread(blink_lights)
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)
Дія#
stop#
stop зупиняє потік вручну, що корисно, коли завдання більше не потрібне або коли програмі потрібно скинути потоки. Після зупинки потік не можна перезапустити. Щоб запустити його знову, потрібно створити новий потік за допомогою Thread.
Використання:
my_thread.stop()
Параметри |
Опис |
|---|---|
|
Раніше запущений об’єкт потоку. Це ім’я, яке присвоюється під час створення потоку за допомогою |
"""
Run multiple threads simultaneously
Turn right, blink lights and display heading at once
Stop blinking lights after 2 seconds
"""
def blink_lights():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)
wait(0.5, SECONDS)
def display_heading():
while True:
robot.screen.clear_row()
robot.screen.set_cursor(1, 1)
robot.screen.print(f"Heading: {robot.inertial.get_yaw()}")
wait(50, MSEC)
blink_lights_thread = Thread(blink_lights)
display_heading_thread = Thread(display_heading)
robot.turn(RIGHT)
wait(2, SECONDS)
blink_lights_thread.stop()