Introduction
The event loop is the core of asyncio - it runs async tasks, handles I/O, and schedules callbacks. Understanding event loop is essential for async programming.
Running the Event Loop
import asyncio
async def my_task():
print("Task started")
await asyncio.sleep(1)
print("Task completed")
# Python 3.7+
asyncio.run(my_task())
# Older method
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(my_task())
finally:
loop.close()
get_event_loop
import asyncio
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.sleep(1))
# In async context
async def async_main():
loop = asyncio.get_running_loop()
task = loop.create_task(asyncio.sleep(1))
await task
create_task
import asyncio
async def task1():
await asyncio.sleep(1)
return "Task 1 done"
async def task2():
await asyncio.sleep(0.5)
return "Task 2 done"
async def main():
loop = asyncio.get_running_loop()
t1 = loop.create_task(task1())
t2 = loop.create_task(task2())
results = await asyncio.gather(t1, t2)
print(results)
asyncio.run(main())
Scheduling Callbacks
import asyncio
def callback(name):
print(f"Callback {name} called")
async def main():
loop = asyncio.get_running_loop()
loop.call_soon(callback, "A")
loop.call_later(1.0, callback, "B")
await asyncio.sleep(2)
Custom Event Loop
import asyncio
class CustomEventLoop(asyncio.AbstractEventLoop):
def run_until_complete(self, future):
# Custom implementation
pass
# Create custom loop
loop = CustomEventLoop()
loop.run_until_complete(some_async_function())
Practice Problems
- Run multiple async tasks concurrently
- Use create_task with gathering
- Schedule callbacks at different times
- Handle event loop in different contexts
- Create loop for specific platform