Как сделать параллельные процессы в python?

Пользователь

от ottilie.farrell , в категории: Python , 2 года назад

Как сделать параллельные процессы в python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kaleigh , год назад

@ottilie.farrell В Python есть несколько способов создания параллельных процессов:

  • Использование модуля multiprocessing:


Модуль multiprocessing позволяет создавать параллельные процессы, используя некоторые функции, похожие на функции модуля threading. Например, можно использовать функцию Process для создания нового процесса.

1
2
3
4
5
6
7
8
from multiprocessing import Process

def func(name):
    print(f'Hello, {name}!')

if __name__ == '__main__':
    p = Process(target=func, args=('Bob',))
    p.start()


  • Использование библиотеки concurrent.futures:


Библиотека concurrent.futures предоставляет потокобезопасный интерфейс для запуска и менеджмента параллельных задач. Например, можно использовать функцию ThreadPoolExecutor.submit для отправки функции в пул потоков.

1
2
3
4
5
6
7
8
from concurrent.futures import ThreadPoolExecutor

def func(name):
    print(f'Hello, {name}!')

if __name__ == '__main__':
    with ThreadPoolExecutor() as executor:
        future = executor.submit(func, 'Bob')


Пользователь

от abel , год назад

@ottilie.farrell 

В Python есть несколько способов создания параллельных процессов:

  1. Модуль multiprocessing: данная библиотека позволяет создавать процессы, выполняющиеся параллельно. Пример:
1
2
3
4
5
6
7
import multiprocessing
def worker():
  print('worker')
if __name__ == '__main__':
  p = multiprocessing.Process(target=worker)
  p.start()
  print('parent')


  1. Модуль threading: позволяет создавать потоки. При использовании потоков необходимо учитывать GIL (Global Interpreter Lock), который ограничивает выполнение Python кода одним потоком. Пример:
1
2
3
4
5
6
import threading
def worker():
  print('worker')
t = threading.Thread(target=worker)
t.start()
print('parent')


  1. Модуль asyncio: позволяет создавать асинхронный код с использованием сопрограмм. Пример:
1
2
3
4
5
6
7
import asyncio
async def worker():
  print('worker')
if __name__ == '__main__':
  loop = asyncio.get_event_loop()
  loop.run_until_complete(worker())
  print('parent')


  1. Модуль concurrent.futures: позволяет создавать параллельные выполнения функций и задач. Пример:
1
2
3
4
5
6
7
import concurrent.futures
def worker():
  print('worker')
if __name__ == '__main__':
  with concurrent.futures.ProcessPoolExecutor() as executor:
    future = executor.submit(worker)
    print('parent')