В CPU-bound-сервисе заменили ThreadPoolExecutor на ProcessPoolExecutor, но передают каждой задаче большой объект. Почему ускорение может исчезнуть?
База Hintsage
Конкурентность и asyncio
Threads, processes, GIL, coroutines и asyncio.
Практика
Вопросы: Конкурентность и asyncio
В веб-обработчике отменяется внешняя задача запроса, но начатую операцию нужно довести до конца. Что именно изменяет asyncio.shield в отношении отмены?
В сервисе несколько связанных корутин запускают через asyncio.TaskGroup: одна завершается исключением. Как TaskGroup определяет судьбу остальных задач?
Каким образом event loop узнаёт, что сетевое соединение готово к чтению, не создавая отдельный поток для каждого клиента?
Заменяет ли GIL блокировку при изменении общей переменной из нескольких потоков CPython?
Предскажите, как asyncio обработает исключение в созданной, но не ожидаемой задаче, и когда разработчик его увидит?
В чём опасность запуска дочернего процесса через fork после создания потоков?
В сервисе один ресурс используют потоки и корутины: почему asyncio.Lock не может быть общей защитой доступа?
За счёт чего значение ContextVar не смешивается между asyncio-задачами в одном потоке?
Разберите последствие: что может случиться с фоновой asyncio-задачей, если приложение не хранит на неё сильную ссылку?
Как завершение основного потока влияет на обычный не-daemon поток Python?
При отмене asyncio-задачи, ожидающей результат функции в пуле потоков, прекращается ли уже выполняющаяся функция?
Как безопасно передать работу из другого потока в уже работающий event loop asyncio?
Какой механизм Python обеспечивает отдельное состояние для каждого потока без передачи этого состояния через аргументы функций?
Сопоставьте планирование корутин asyncio и потоков: кто определяет момент передачи управления?
В сервисе нужно ограничить число корутин, одновременно обращающихся к внешнему API. Что именно делает asyncio.Semaphore с корутинами, превысившими лимит?
Объясните механизм: почему объект корутины сам по себе не начинает выполнение?
Что произойдёт с основным потоком Python, если рабочая функция обычного threading.Thread завершится необработанным исключением?
Практическая ситуация: определите, когда завершится третий вызов put и почему, если потребитель начнёт работу через секунду.
import asyncio
async def producer(queue):
for item in range(3):
print("before", item)
await queue.put(item)
print("after", item)
async def main():
queue = asyncio.Queue(maxsize=2)
task = asyncio.create_task(producer(queue))
await asyncio.sleep(1)
print("got", await queue.get())
await task
asyncio.run(main())
Практическая ситуация: в одном event loop первая корутина удерживает threading.Lock во время await, а вторая пытается захватить этот lock. Может ли event loop зависнуть?
Показано 21–40 из 50