Back to questions
СБЕР
Middle
1
Чем Semaphore отличается от Lock в asyncio?
Companies where asked
Answer from AI
sobes.tech AI
В asyncio Lock и Semaphore используются для управления доступом к ресурсам, но отличаются по назначению и поведению.
-
Lock— это простой механизм блокировки, который позволяет только одному корутину одновременно получить доступ к ресурсу. ЕслиLockзанят, другие корутины ждут его освобождения. -
Semaphoreпозволяет ограничить количество одновременно работающих корутин, получающих доступ к ресурсу, числом, заданным при создании. Например,Semaphore(3)позволит одновременно работать трем корутинам.
Пример использования:
import asyncio
async def worker(sem, worker_id):
async with sem:
print(f"Worker {worker_id} started")
await asyncio.sleep(1)
print(f"Worker {worker_id} finished")
async def main():
sem = asyncio.Semaphore(2) # максимум 2 корутины одновременно
await asyncio.gather(*(worker(sem, i) for i in range(5)))
asyncio.run(main())
В этом примере одновременно будут выполняться не более двух воркеров.
Таким образом, Lock — это частный случай семафора с максимальным значением 1.