Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как использовать threaded python 3 для создания многопоточности?

  1. Как использовать threaded python 3 для создания многопоточности?

    Привет всем! Я пытаюсь понять, как использовать threaded python 3 для создания многопоточности в моем проекте. Кто-то может объяснить, как это работает и где лучше всего применять? Примеры кода очень приветствуются. Читал документы но все равно немного запутался.



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет! Самый простой способ использовать threading в Python — это импортировать модуль `threading` и создать объект `Thread`. Вот пример:

    Программный код:
    import threading
    import time

    def print_numbers
    ():
        for 
    i in range(5):
            print(
    i)
            
    time.sleep(1)

    thread threading.Thread(target=print_numbers)
    thread.start()
    thread.join() 
    Этот код создаст новый поток, который выполнит функцию `print_numbers`. Основное применение многопоточности — это выполнение фоновых задач без блокировки основного потока. Например, вы можете использовать его для обработки данных, выполнения сетевых запросов и т.п.

  4. Цитата Сообщение от AlexForest
    Привет! Самый простой способ использовать threading в Python — это импортировать модуль `threading` и создать объект `Thread`. Вот пример:

    Программный код:
    import threading
    import time

    def print_numbers
    ():
        for 
    i in range(5):
            print(
    i)
            
    time.sleep(1)

    thread threading.Thread(target=print_numbers)
    thread.start()
    thread.join() 
    Этот код создаст новый поток, который выполнит функцию `print_numbers`. Основное применение многопоточности — это выполнение фоновых задач без блокировки основного потока. Например, вы можете использовать его для обработки данных, выполнения сетевых запросов и т.п.
    Круто, объяснение по делу! Но не забудь, что GIL иногда мешает, если это про вычисления, лучше посмотреть на multiprocessing.

  5. Эй! Вот тоже еще пример для того чтобы лучше понять:

    Программный код:
    import threading

    def worker
    ():
        print(
    "Рабочий поток запущен")
        
    threads = []
    for 
    i in range(5):
        
    thread threading.Thread(target=worker)
        
    threads.append(thread)
        
    thread.start()

    for 
    t in threads:
        
    t.join() 
    Этот код создаст и запустит пять потоков, которые выполнят одну и туже функцию `worker`. Каждый поток добавлен в список и после запуска, основной поток ждёт завершения всех созданных потоков с помощью `join`.

  6. Цитата Сообщение от Виктор21
    Эй! Вот тоже еще пример для того чтобы лучше понять:

    Программный код:
    import threading

    def worker
    ():
        print(
    "Рабочий поток запущен")
        
    threads = []
    for 
    i in range(5):
        
    thread threading.Thread(target=worker)
        
    threads.append(thread)
        
    thread.start()

    for 
    t in threads:
        
    t.join() 
    Этот код создаст и запустит пять потоков, которые выполнят одну и туже функцию `worker`. Каждый поток добавлен в список и после запуска, основной поток ждёт завершения всех созданных потоков с помощью `join`.
    О, прикольный пример, просто и понятно. Но почему бы учетку не сделать через threading.Lock или RLock?

  7. Согласен с предыдущими постами, но иногда нужно использовать `concurrent.futures` для более высокого уровня абстракции. Смотри вот так:

    Программный код:
    from concurrent.futures import ThreadPoolExecutor

    def task
    (message):
        print(
    message)

    with ThreadPoolExecutor(max_workers=4) as executor:
        
    futures = [executor.submit(taskf'Task {i}') for i in range(5)]
        for 
    future in futures:
            
    future.result() 
    Это чуть сложнее, но иногда удобнее для управления большим количеством потоков.

  8. Цитата Сообщение от Siryn
    Согласен с предыдущими постами, но иногда нужно использовать `concurrent.futures` для более высокого уровня абстракции. Смотри вот так:

    Программный код:
    from concurrent.futures import ThreadPoolExecutor

    def task
    (message):
        print(
    message)

    with ThreadPoolExecutor(max_workers=4) as executor:
        
    futures = [executor.submit(taskf'Task {i}') for i in range(5)]
        for 
    future in futures:
            
    future.result() 
    Это чуть сложнее, но иногда удобнее для управления большим количеством потоков.
    Да, `concurrent.futures` тема! Особенно если нужно красиво и читаемо.

  9. Привет! Если тебе нужно больше контроля над потоками, ты можешь использовать классы. Пример:

    Программный код:
    import threading

    class MyThread(threading.Thread):
        
    def run(self):
            for 
    i in range(3):
                print(
    f"Thread {self.name} count {i}")

    threads = []
    for 
    i in range(3):
        
    MyThread()
        
    t.start()
        
    threads.append(t)
        
    for 
    t in threads:
        
    t.join() 
    Создаешь класс-наследник от `threading.Thread` и переопределяешь метод `run`. Удобно для более сложных задач.

  10. Цитата Сообщение от Drakol
    Привет! Если тебе нужно больше контроля над потоками, ты можешь использовать классы. Пример:

    Программный код:
    import threading

    class MyThread(threading.Thread):
        
    def run(self):
            for 
    i in range(3):
                print(
    f"Thread {self.name} count {i}")

    threads = []
    for 
    i in range(3):
        
    MyThread()
        
    t.start()
        
    threads.append(t)
        
    for 
    t in threads:
        
    t.join() 
    Создаешь класс-наследник от `threading.Thread` и переопределяешь метод `run`. Удобно для более сложных задач.
    О, супер! Использование классов иногда реально облегчает жизнь. Особенно если тебе нужно делать что-то более сложное.

Страница 1 из 2 12 ПоследняяПоследняя