«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Краткое руководство по модулю потоков Python с примерами

Краткое руководство по модулю потоков Python с примерами

Опубликовано 8 ноября 2024 г.
Просматривать:697

A Quick Guide to the Python threading Module with Examples

Введение

Модуль потоков в Python предоставляет высокоуровневый интерфейс для создания потоков и управления ими, что позволяет одновременно запускать код. Это может быть особенно полезно для задач, которые могут выполняться параллельно, например операций ввода-вывода. Ниже приведен список часто используемых методов и функций модуля потоковой обработки с краткими примерами.

1. Поток()

Класс 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

2. старт()

Начинает активность темы.

t = threading.Thread(target=print_numbers)
t.start()  # Runs the target function in a separate thread

3. присоединиться([тайм-аут])

Блокирует вызывающий поток до тех пор, пока поток, метод join() которого вызывается, не завершится. При желании вы можете указать тайм-аут.

t = threading.Thread(target=print_numbers)
t.start()
t.join(2)  # Waits up to 2 seconds for the thread to finish

4. is_alive()

Возвращает значение True, если поток все еще выполняется.

t = threading.Thread(target=print_numbers)
t.start()
print(t.is_alive())  # True if the thread is still running

5. текущий_поток()

Возвращает текущий объект 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

6. перечислить()

Возвращает список всех живых объектов Thread.

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_numbers)
t1.start()
t2.start()

print(threading.enumerate())  # Lists all active threads

7. active_count()

Возвращает количество живых объектов Thread.

print(threading.active_count())  # Returns the number of active threads

8. Блокировка()

Объект 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()

9. РЛокк()

Реентерабельная блокировка позволяет потоку получить() блокировку несколько раз, не блокируя себя.

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()

10. Условие()

Объект 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()

11. Событие()

Объект 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

12. Семафор()

Объект 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()

13. Таймер(интервал, функция)

Поток таймера выполняет функцию через указанный интервал.

def delayed_function():
    print("Executed after delay")

timer = threading.Timer(3, delayed_function)
timer.start()  # Executes `delayed_function` after 3 seconds

14. setDaemon(True)

Потоки демона запускаются в фоновом режиме и завершаются автоматически при выходе из основной программы. Вы можете сделать поток демоном, вызвав 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.

Заявление о выпуске Эта статья воспроизводится по адресу: https://dev.to/usooldatascience/a-quick-guide-to-the-python-threading-module-with-examples-2b3g?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с исследованием[email protected].
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3