المعالجة غير المتزامنة في بايثون
توضح هذه المقالة المعالجة غير المتزامنة في بايثون۔
يمكنك تعلم أمثلة كود لاستخدام الأساسيات في بايثون باستخدام async/await ووحدة asyncio.۔
YouTube Video
المعالجة غير المتزامنة في بايثون
المعالجة غير المتزامنة في بايثون هي آلية لمعالجة عمليات الإدخال والإخراج المُستهلكة للوقت بكفاءة، مثل قراءة وكتابة الملفات أو الاتصالات الشبكية.۔ في المعالجة المتزامنة، تنتظر العملية التالية حتى تنتهي الحالية، لكن مع المعالجة غير المتزامنة يمكنك متابعة مهام أخرى أثناء وقت الانتظار.۔ في بايثون، يتم توفير وحدة asyncio لتنفيذ المعالجة غير المتزامنة.۔ فيما يلي سنشرح العناصر الأساسية لها وكيفية استخدامها خطوة بخطوة.۔
الصياغة الأساسية
في قلب المعالجة غير المتزامنة توجد دوال تُسمى الكوروتينات.۔ تقوم الوظائف async بتعريف الوظائف غير المتزامنة، وتُستخدم await للانتظار داخل هذه الوظائف لتنفيذ مهمة غير متزامنة۔
1import asyncio
2
3async def say_hello():
4 print("Hello")
5 await asyncio.sleep(1)
6 print("World")
7
8if __name__ == "__main__":
9 # Execute asynchronous task
10 asyncio.run(say_hello())- في الكود أعلاه، يتم تعريف وظيفة
say_helloكمهمة غير متزامنة۔ أثناء الانتظار لمدة ثانية واحدة باستخدامsleep()، قد يتم تنفيذ مهام غير متزامنة أخرى۔
تنفيذ مهام متعددة
من خلال استخدام دالة gather من وحدة asyncio، يمكنك تشغيل عدة مهام في نفس الوقت۔
1import asyncio
2
3async def task1():
4 print("Task 1 started")
5 await asyncio.sleep(2)
6 print("Task 1 completed")
7
8async def task2():
9 print("Task 2 started")
10 await asyncio.sleep(1)
11 print("Task 2 completed")
12
13async def main():
14 await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17 asyncio.run(main())- في هذا المثال، يتم تنفيذ
task1وtask2بالتزامن۔ نتيجة لذلك، ينتهيtask2أولاً من بين المهمتين، ولكن إجمالي وقت التنفيذ يساوي وقت تنفيذ المهمة الأطول۔
التعامل مع الأخطاء
معالجة الأخطاء مهمة حتى في المعالجة غير المتزامنة۔ يمكنك اعتراض ومعالجة الأخطاء باستخدام الصيغة القياسية try-except۔
1import asyncio
2
3async def faulty_task():
4 raise Exception("An error occurred")
5
6async def main():
7 try:
8 await faulty_task()
9 except Exception as e:
10 print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13 asyncio.run(main())- يوضح هذا الكود كيفية التقاط الاستثناءات التي تحدث داخل الدوال غير المتزامنة بواسطة
try-exceptومعالجة رسائل الأخطاء بأمان.۔ يتم التقاط الاستثناء الناتج عنfaulty_taskداخل الدالةmainويتم عرضه بشكل مناسب.۔
الملخص
تستخدم المعالجة غير المتزامنة في بايثون كلمتي async و await بالإضافة إلى asyncio لتنفيذ مهام أخرى بشكل متزامن أثناء انتظار عمليات الإدخال/الإخراج، مما يسمح بمعالجة فعالة.۔ من خلال الاستفادة من التنفيذ المتزامن لعدة مهام وعمليات الإدخال/الإخراج غير المتزامنة، يمكنك تحسين الأداء بشكل كبير.۔ بالإضافة إلى ذلك، بما أنك تستطيع معالجة الأخطاء كما تفعل مع try-except العادية، يمكنك تشغيل الكود غير المتزامن بأمان.۔
يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔