Junior — Middle
Is it possible to encounter a race condition when using asyncio in Python?
sobes.tech AI
Answer from AI
Yes, when using asyncio in Python, you can encounter a race condition. Although asyncio runs in a single thread and uses cooperative multitasking, a race condition occurs when multiple coroutines access and modify a shared resource simultaneously without proper synchronization.
For example, if two coroutines read and modify a shared dictionary or counter at the same time, the result can be unpredictable.
To prevent such situations, asyncio uses synchronization mechanisms, such as asyncio.Lock:
import asyncio
counter = 0
lock = asyncio.Lock()
async def increment():
global counter
async with lock:
temp = counter
await asyncio.sleep(0) # simulate context switch
counter = temp + 1
async def main():
await asyncio.gather(increment(), increment())
print(counter) # Expected 2
asyncio.run(main())
Without using lock, the result can be less than expected due to the race condition.