Потоковый модуль в Python

Это четвертая запись в блоге из этой серии.

Параллелизм VS параллелизм — Часть 1

Многопоточность VS многопроцессорность — Часть 2

Введение в многопоточность в Python — часть 3

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

Если вы хотите освежить в памяти вводные темы, связанные с потоками, прежде чем читать эту статью, вы можете просмотреть упомянутые выше статьи блога, которыми я поделился.

Вот простой пример использования модуля threading для создания и запуска нового потока:

import threading

def my_function():
    # Code to be executed by the thread
    print("Hello from a new thread!")

# Create a new thread
thread = threading.Thread(target=my_function)

# Start the thread
thread.start()

В этом примере мы определяем функцию с именем my_function, которую хотим выполнить в отдельном потоке. Затем мы создаем новый объект Thread и передаем my_function в качестве аргумента target. Наконец, мы вызываем метод start для объекта Thread, чтобы запустить поток.

Это более подробный пример, демонстрирующий некоторые дополнительные возможности модуля threading:

import threading
import time

# A function that we want to execute in a separate thread
def my_function(name, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print(name + ": " + str(time.ctime(time.time())))

# Create two threads
thread1 = threading.Thread(target=my_function, args=("Thread 1", 2))
thread2 = threading.Thread(target=my_function, args=("Thread 2", 4))

# Start the threads
thread1.start()
thread2.start()

# Wait for the threads to complete
thread1.join()
thread2.join()

print("Threads complete.")

Выход :

В этом примере мы определяем функцию с именем my_function, которая будет выполняться в отдельном потоке. Эта функция принимает два аргумента: имя и задержка. Функция напечатает имя потока и текущее время, а затем задержится на указанное количество секунд перед печатью следующего сообщения.

Затем мы создаем два потока, thread1 и thread2, и передаем my_function в качестве аргумента target и требуемое имя и аргументы delay в качестве аргументы аргумент. Мы запускаем оба потока, вызывая для них метод start.

Наконец, мы используем метод join, чтобы дождаться завершения обоих потоков, прежде чем напечатать сообщение «Потоки завершены».

Пример реального приложения с использованием модуля Threading

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

Вот пример кода, демонстрирующий, как это может работать:

import threading
import requests

def fetch_data(url):
    # Fetch data from the remote server
    response = requests.get(url)
    data = response.json()
    return data

def main():
    # Start a new thread to fetch the data
    thread = threading.Thread(target=fetch_data, args=("http://example.com/data",))
    thread.start()

    # Display a loading indicator to the user
    print("Loading...")

    # Wait for the thread to complete
    thread.join()

    # Display the data to the user
    print(thread.result)

main()

В этом примере мы определяем функцию с именем fetch_data, которая извлекает данные с удаленного сервера с помощью модуля requests. Затем мы создаем новый поток и передаем fetch_data в качестве аргумента target, а URL-адрес для получения в качестве args аргумент.

Мы запускаем поток, а затем отображаем индикатор загрузки для пользователя. Пока поток работает в фоновом режиме, основной поток приложения продолжает работать и отображать индикатор загрузки.

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

Я надеюсь, что эта статья в блоге поможет лучше понять модуль потоковой передачи в python. Если вам нравится мой пост в блоге и вы хотите, чтобы я писал больше такого контента, пожалуйста, нажмите кнопку аплодисментов.

Спасибо, что прочитали эту статью! Оставьте комментарий ниже, если у вас есть какие-либо вопросы. Обязательно подпишитесь на публикацию DataUniverse .