Каковы преимущества/недостатки запуска нового ThreadPoolExecutor при выполнении `loop.run_in_executor`?Python

Программы на Python
Ответить
Anonymous
 Каковы преимущества/недостатки запуска нового ThreadPoolExecutor при выполнении `loop.run_in_executor`?

Сообщение Anonymous »

В документации по циклу событий можно увидеть следующий пример:

Код: Выделить всё

import asyncio
import concurrent.futures

def blocking_io():
# File operations (such as logging) can block the
# event loop: run them in a thread pool.
with open('/dev/urandom', 'rb') as f:
return f.read(100)

def cpu_bound():
# CPU-bound operations will block the event loop:
# in general it is preferable to run them in a
# process pool.
return sum(i * i for i in range(10 ** 7))

async def main():
loop = asyncio.get_running_loop()

## Options:

# 1. Run in the default loop's executor:
result = await loop.run_in_executor(
None, blocking_io)
print('default thread pool', result)

# 2. Run in a custom thread pool:
with concurrent.futures.ThreadPoolExecutor() as pool:
result = await loop.run_in_executor(
pool, blocking_io)
print('custom thread pool', result)

# 3. Run in a custom process pool:
with concurrent.futures.ProcessPoolExecutor() as pool:
result = await loop.run_in_executor(
pool, cpu_bound)
print('custom process pool', result)

# 4. Run in a custom interpreter pool:
with concurrent.futures.InterpreterPoolExecutor() as pool:
result = await loop.run_in_executor(
pool, cpu_bound)
print('custom interpreter pool', result)

if __name__ == '__main__':
asyncio.run(main())
Предполагая, что задача связана с вводом-выводом, каковы преимущества варианта 2 по сравнению с ThreadPoolExecutor по умолчанию? Просто я могу контролировать, как он инициализируется (

Код: Выделить всё

num_workers
, инициализатор и т. д.), или есть что-то еще под капотом?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»