Carol Carol نشر 29 سبتمبر 2024 أرسل تقرير نشر 29 سبتمبر 2024 (معدل) حاولت فهم تعدد المهام بايثون و حفظه حرفياً لم استطع مع اني انتهيت من تعلم بايثون ثانياً : لكن بشكل عام كلما احاول كتابة اي كود لا اعرف اين ابدأ و ماذا اكتب و هل يجب كلمة محددة ام اي كلمة عند كتابة كلاس مثلاً تم التعديل في 29 سبتمبر 2024 بواسطة Carol Carol 1 اقتباس
0 Mustafa Suleiman نشر 29 سبتمبر 2024 أرسل تقرير نشر 29 سبتمبر 2024 فهم تعدد المهام Concurrency يتطلب استيعاب لبعض المفاهيم الأساسية، وصعوبة كتابة الكود تأتي من عدم وضوح الهدف المراد تحقيقه، فتعدد المهام ليس أداة واحدة، بل مجموعة من التقنيات، واختيار التقنية المناسبة يعتمد على ما تريد تحقيقه. أولاً الـ Processes أو العمليات هي عملية مستقلة تمامًا عن باقي العمليات، لها مساحة ذاكرة خاصة بها، وإنشاء عملية جديدة يعني إنشاء برنامج جديد تمامًا. وذلك مناسب للمهام التي تتطلب عزلًا تامًا أو استخدام موارد كبيرة، والمكتبة المستخدمة هي multiprocessing. للتوضيح بمثال بسيط لحساب مربع الأعداد من 1 إلى 5 في عمليات منفصلة: import multiprocessing def square(n): return n * n if __name__ == '__main__': with multiprocessing.Pool(processes=5) as pool: results = pool.map(square, range(1, 6)) print(results) # Output: [1, 4, 9, 16, 25] المفهوم الثاني هو الخيوط Threads وهي خيوط متعددة تعمل ضمن نفس العملية، وتشارك نفس مساحة الذاكرة، وإنشاء خيط أسرع من إنشاء عملية، لكنها تشارك الموارد. وهي مناسبة للمهام التي تتطلب سرعة عالية وتشارك البيانات، لكن يجب الانتباه إلى مشاكل التزامن (Race Conditions). والمكتبة المستخدمة هي threading. وإليك مثال بسيط لطباعة رسائل من خيوط مختلفة: import threading import time def print_message(message): for i in range(5): print(f"Thread {threading.current_thread().name}: {message}") time.sleep(1) if __name__ == '__main__': thread1 = threading.Thread(target=print_message, args=("Hello",)) thread2 = threading.Thread(target=print_message, args=("World",)) thread1.start() thread2.start() thread1.join() thread2.join() المفهوم الثالث هو المهام المتزامنة Coroutine/Asyncio ولا تنشئ عمليات أو خيوط جديدة، بل تنتقل بين المهام بشكل غير متزامن باستخدام الكلمات المفتاحية async و await، ومناسب للمهام التي تتضمن انتظارًا (مثل طلبات الشبكة) أي عمليات I/O كثيفة (مثل الشبكات، قواعد البيانات)، حيث لا يتم حجب الخيط أثناء الانتظار. والمكتبة المستخدمة هي asyncio، وكمثال بسيط لطباعة رسائل مع تأخير باستخدام Asyncio: import asyncio async def print_message(message, delay): await asyncio.sleep(delay) print(f"Message: {message}") async def main(): await asyncio.gather( print_message("Hello", 2), print_message("World", 1) ) asyncio.run(main()) بالتالي عليك تحديد ما الذي تريد تحقيقه بتعدد المهام؟ هل تريد تسريع عملية حسابية؟ هل تريد التعامل مع طلبات متعددة من الشبكة؟ فالعمليات مناسبة للمهام المستقلة، الخيوط للمهام التي تشارك البيانات، والمهام المتزامنة للمهام التي تتضمن انتظارًا. ولا تحاول كتابة برنامج معقد من البداية، ابدأ بمثال بسيط وفهم كيفية عمله قبل إضافة تعقيدات. 1 اقتباس
0 Aroona Ab نشر 1 ديسمبر 2024 أرسل تقرير نشر 1 ديسمبر 2024 اريد برنامج بلغة بايتون يوضح مفهوم التزامن اكتر؟!! بتاريخ On 29/9/2024 at 20:50 قال Carol Carol: حاولت فهم تعدد المهام بايثون و حفظه حرفياً لم استطع مع اني انتهيت من تعلم بايثون ثانياً : لكن بشكل عام كلما احاول كتابة اي كود لا اعرف اين ابدأ و ماذا اكتب و هل يجب كلمة محددة ام اي كلمة عند كتابة كلاس مثلاً 1 اقتباس
0 Mustafa Suleiman نشر 1 ديسمبر 2024 أرسل تقرير نشر 1 ديسمبر 2024 بتاريخ منذ ساعة مضت قال Aroona Ab: اريد برنامج بلغة بايتون يوضح مفهوم التزامن اكتر؟!! التزامن ببساطة تقنية برمجية تتيح للبرنامج تنفيذ عدة مهام في نفس الوقت، أي أن البرنامج يمكنه القيام بمهام متعددة في نفس الوقت، بدلاً من انتظار انتهاء المهام السابقة قبل البدء في المهام الجديدة. للتوضيح، ساستخدم مكتبة threading في بايثون لإنشاء خيطين Threads منفصلين، الخيط Thread الأول سيقوم بطباعة الأرقام من 1 إلى 10، والخيط الثاني سيقوم بطباعة الأحرف من A إلى J. وسيصبح البرنامج كالتالي وإليك تعليقات لتوضيح الأمر: import threading import time # دالة للخيط الأول def print_numbers(): for i in range(1, 11): print(i) time.sleep(0.5) # انتظر نصف ثانية قبل الطباعة التالية # دالة للخيط الثاني def print_letters(): for letter in 'ABCDEFGHIJ': print(letter) time.sleep(0.5) # انتظر نصف ثانية قبل الطباعة التالية # إنشاء خيطين thread1 = threading.Thread(target=print_numbers) thread2 = threading.Thread(target=print_letters) # بدء الخيطين thread1.start() thread2.start() # انتظار انتهاء الخيطين thread1.join() thread2.join() عندما تشغل البرنامج، ستلاحظ أن الأرقام والأحرف يتم طباعتها في نفس الوقت، وذلك يعني أن البرنامج يقوم بمهام متعددة في نفس الوقت، وهو ما يسمى بالتزامن. 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I 10 J وللعلم بايثون لديها بعض القيود فيما يتعلق بالتزامن، بسبب ما يعرف بـ "Global Interpreter Lock" (GIL). ويعني أن بايثون لا يمكنه استخدام أكثر من نواة واحدة في المعالج في نفس الوقت، حتى لو كان لديك معالج متعدد النواة. 1 اقتباس
السؤال
Carol Carol
حاولت فهم تعدد المهام بايثون و حفظه حرفياً لم استطع مع اني انتهيت من تعلم بايثون ثانياً : لكن بشكل عام كلما احاول كتابة اي كود لا اعرف اين ابدأ و ماذا اكتب و هل يجب كلمة محددة ام اي كلمة عند كتابة كلاس مثلاً
تم التعديل في بواسطة Carol Carol3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.