הספרייה asyncio של פייתון (הוצגה בגרסה 3.4 והורחבה עם התחביר async/await בגרסה 3.5) מספקת תשתית לתכנות אסינכרוני מבוסס קלט/פלט באמצעות לולאת אירועים (event loop).
בניגוד ל־threading או multiprocessing, asyncio פועל בשיטה של ריבוי משימות שיתופי (cooperative multitasking), בדומה למה שקיים ב־Node.js או שפות כמו JavaScript / C#.
מושגים מרכזיים ב־asyncio
- קורוטינות (coroutines): פונקציות שמוגדרות עם async def, שיכולות להשתמש ב־await על פעולות אסינכרוניות אחרות.
- await: משמש בתוך קורוטינה כדי "להחזיר שליטה" ללולאת האירועים עד שהפעולה מסתיימת.
- לולאת אירועים (event loop): הלב של asyncio שמנהל את הקורוטינות ומריץ אותן. לרוב ניגשים אליו עם asyncio.get_event_loop() או פשוט משתמשים ב־asyncio.run().
- משימות (Tasks): קורוטינות שהוזמנו להרצה מקבילה ע"י asyncio.create_task(coro()). משימה היא עטיפה סביב קורוטינה, בדומה ל־Promise/ Future.
דוגמה – בסיסי asyncio
בדוגמה זו, say_after היא קורוטינה שמבצעת השהייה ואז מדפיסה הודעה.
בפונקציה main, אנחנו מזמנים שתי קורוטינות בצורה אסינכרונית עם create_task.
הן מתחילות לרוץ מיד – והלולאת אירועים יכולה להריץ קוד אחר בינתיים.
התוצאה: "hello" יודפס אחרי 2 שניות, "world" אחרי 3 שניות – והזמן הכולל הוא כ־3 שניות (ולא 5) כי ההמתנות התרחשו במקביל.