Модуль потоков в Python предоставляет высокоуровневый интерфейс для создания потоков и управления ими, что позволяет одновременно запускать код. Это может быть особенно полезно для задач, которые могут выполняться параллельно, например операций ввода-вывода. Ниже приведен список часто используемых методов и функций модуля потоковой обработки с краткими примерами.
Класс Thread — это сердце модуля потоковой обработки. Используя этот класс, вы можете создавать и запускать новые темы.
import threading def print_numbers(): for i in range(5): print(i) t = threading.Thread(target=print_numbers) t.start() # Starts a new thread t.join() # Waits for the thread to finish
Начинает активность темы.
t = threading.Thread(target=print_numbers) t.start() # Runs the target function in a separate thread
Блокирует вызывающий поток до тех пор, пока поток, метод join() которого вызывается, не завершится. При желании вы можете указать тайм-аут.
t = threading.Thread(target=print_numbers) t.start() t.join(2) # Waits up to 2 seconds for the thread to finish
Возвращает значение True, если поток все еще выполняется.
t = threading.Thread(target=print_numbers) t.start() print(t.is_alive()) # True if the thread is still running
Возвращает текущий объект Thread, представляющий вызывающий поток.
import threading def print_current_thread(): print(threading.current_thread()) t = threading.Thread(target=print_current_thread) t.start() # Prints the current thread info
Возвращает список всех живых объектов Thread.
t1 = threading.Thread(target=print_numbers) t2 = threading.Thread(target=print_numbers) t1.start() t2.start() print(threading.enumerate()) # Lists all active threads
Возвращает количество живых объектов Thread.
print(threading.active_count()) # Returns the number of active threads
Объект Lock — это примитивная блокировка, которая используется для предотвращения состояний гонки. Вы можете использовать его, чтобы обеспечить доступ к общему ресурсу одновременно только одному потоку.
lock = threading.Lock() def thread_safe_function(): with lock: # Acquires the lock # Critical section print("Thread-safe code") t = threading.Thread(target=thread_safe_function) t.start()
Реентерабельная блокировка позволяет потоку получить() блокировку несколько раз, не блокируя себя.
lock = threading.RLock() def reentrant_function(): with lock: with lock: # Same thread can acquire the lock again print("Reentrant lock example") t = threading.Thread(target=reentrant_function) t.start()
Объект Condition позволяет потокам ожидать выполнения некоторого условия.
condition = threading.Condition() def thread_wait(): with condition: condition.wait() # Wait for the condition print("Condition met") def thread_notify(): with condition: condition.notify() # Notify the waiting thread t1 = threading.Thread(target=thread_wait) t2 = threading.Thread(target=thread_notify) t1.start() t2.start()
Объект Event используется для передачи сигналов между потоками. Поток может дождаться установки события, а другой поток может установить это событие.
event = threading.Event() def wait_for_event(): event.wait() # Wait until the event is set print("Event has been set") t = threading.Thread(target=wait_for_event) t.start() event.set() # Set the event to allow the thread to continue
Объект Semaphore позволяет ограничить количество потоков, которые могут одновременно обращаться к ресурсу.
semaphore = threading.Semaphore(2) # Only 2 threads can access the resource at once def access_resource(): with semaphore: print("Resource accessed") t1 = threading.Thread(target=access_resource) t2 = threading.Thread(target=access_resource) t3 = threading.Thread(target=access_resource) t1.start() t2.start() t3.start()
Поток таймера выполняет функцию через указанный интервал.
def delayed_function(): print("Executed after delay") timer = threading.Timer(3, delayed_function) timer.start() # Executes `delayed_function` after 3 seconds
Потоки демона запускаются в фоновом режиме и завершаются автоматически при выходе из основной программы. Вы можете сделать поток демоном, вызвав setDaemon(True) или передав daemon=True конструктору потока.
t = threading.Thread(target=print_numbers, daemon=True) t.start() # Daemon thread will exit when the main program ends
Модуль потоков — это мощный инструмент для управления параллелизмом в Python. Он предоставляет несколько классов и методов для создания потоков и управления ими, что упрощает параллельное выполнение кода. Этот модуль необходим для написания параллельных программ Python, от использования базовых объектов Thread до управления синхронизацией с помощью Lock и Semaphore.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3