طابور Python Multiprocessing

Tabwr Python Multiprocessing



العنصر الأكثر أهمية في بنية البيانات هو قائمة الانتظار. يمكن مقارنة قائمة انتظار بنية البيانات 'الوارد أولاً يصرف أولاً' والتي تعد أساس معالجة Python المتعددة. يتم توفير قوائم الانتظار لوظيفة العملية للسماح للعملية بجمع البيانات. العنصر الأول من البيانات المراد حذفه من قائمة الانتظار هو العنصر الأول الذي يتم إدخاله. نستخدم طريقة 'put ()' الخاصة بقائمة الانتظار لإضافة البيانات إلى قائمة الانتظار وطريقة 'get ()' الخاصة بها لاسترداد البيانات من قائمة الانتظار.

مثال 1: استخدام طريقة Queue () لإنشاء قائمة انتظار معالجة متعددة في Python

في هذا المثال ، نقوم بإنشاء قائمة انتظار متعددة المعالجات في Python باستخدام طريقة 'queue ()'. تشير المعالجة المتعددة إلى استخدام وحدة معالجة مركزية واحدة أو أكثر في النظام لإجراء عمليتين أو أكثر في وقت واحد. تسهل المعالجة المتعددة ، وهي وحدة نمطية مبنية في بايثون ، التبديل بين العمليات. يجب أن نكون على دراية بخاصية العملية قبل العمل مع المعالجة المتعددة. نحن ندرك أن قائمة الانتظار هي عنصر حاسم في نموذج البيانات. قائمة انتظار البيانات القياسية ، المبنية على فكرة 'First-In-First-Out' ، ومعالجة Python المتعددة هي نظائر دقيقة. بشكل عام ، تخزن قائمة الانتظار كائن Python وهي ضرورية لنقل البيانات بين المهام.







تُستخدم أداة 'spyder' لتنفيذ نص Python الحالي ، لذلك دعونا نبدأ ببساطة. يجب علينا أولاً استيراد وحدة المعالجة المتعددة لأننا نقوم بتشغيل برنامج Python متعدد المعالجات. لقد فعلنا ذلك عن طريق استيراد وحدة المعالجة المتعددة باسم 'm'. باستخدام تقنية 'm.queue ()' ، نستدعي طريقة المعالجة المتعددة 'queue ()'. هنا ، نقوم بإنشاء متغير يسمى 'queue' ووضع طريقة المعالجة المتعددة 'queue ()' فيه. نظرًا لأننا نعلم أن قائمة الانتظار تخزن العناصر بترتيب 'الوارد أولاً يصرف أولاً' ، فإن العنصر الذي نضيفه أولاً يتم إزالته أولاً. بعد إطلاق قائمة انتظار المعالجة المتعددة ، نسمي طريقة 'print ()' ، ونمرر العبارة 'هناك طابور متعدد المعالجات' كوسيطة لعرضها على الشاشة. بعد ذلك ، نظرًا لأننا نخزن قائمة الانتظار المنشأة في هذا المتغير ، فإننا نطبع قائمة الانتظار بتمرير متغير 'queue' بين قوسي طريقة 'print ()'.




توضح الصورة التالية أن قائمة انتظار المعالجة المتعددة في Python قد تم إنشاؤها الآن. يتم عرض بيان الطباعة أولاً. بعد إنشاء قائمة انتظار المعالجة المتعددة هذه في عنوان الذاكرة المعين ، يمكن استخدامها لنقل البيانات المميزة بين عمليتين قيد التشغيل أو أكثر.







مثال 2: استخدام طريقة 'Qsize ()' لتحديد حجم قائمة انتظار المعالجة المتعددة في Python

نحدد حجم قائمة انتظار المعالجة المتعددة في هذه الحالة. لحساب حجم قائمة انتظار المعالجة المتعددة ، نستخدم طريقة 'qsize ()'. تُرجع الدالة 'qsize ()' الحجم الحقيقي لقائمة انتظار معالجة بايثون المتعددة. بمعنى آخر ، توفر هذه الطريقة العدد الإجمالي للعناصر في قائمة الانتظار.

لنبدأ باستيراد وحدة المعالجة المتعددة بيثون كـ 'm' قبل تشغيل الكود. بعد ذلك ، باستخدام الأمر 'm.queue ()' ، نستدعي وظيفة المعالجة المتعددة 'queue ()' ونضع النتيجة في متغير 'Queue'. ثم ، باستخدام طريقة 'put ()' ، نضيف العناصر إلى قائمة الانتظار في السطر التالي. تُستخدم هذه الطريقة لإضافة البيانات إلى قائمة الانتظار. لذلك ، نسمي 'Queue' بطريقة 'put ()' ونقدم الأعداد الصحيحة كعنصر لها بين قوسين. الأرقام التي نضيفها هي '1' و '2' و '3' و '4' و '5' و '6' و '7' باستخدام وظائف 'put ()'.



علاوة على ذلك ، باستخدام 'قائمة الانتظار' للحصول على حجم قائمة انتظار المعالجة المتعددة ، فإننا نسمي 'qsize ()' مع قائمة انتظار المعالجة المتعددة. بعد ذلك ، في متغير 'النتيجة' الذي تم تكوينه حديثًا ، نحفظ نتيجة طريقة 'qsize ()'. بعد ذلك ، نسمي طريقة 'print ()' ونمرر العبارة 'حجم قائمة انتظار المعالجة المتعددة' كمعامل لها. بعد ذلك ، نسمي المتغير 'result' في وظيفة 'print ()' حيث يتم حفظ الحجم في هذا المتغير.


الصورة الناتجة لها الحجم المعروض. نظرًا لأننا نستخدم وظيفة 'put ()' لإضافة سبعة عناصر إلى قائمة انتظار المعالجة المتعددة ووظيفة 'qsize ()' لتحديد الحجم ، يتم عرض حجم قائمة انتظار المعالجة المتعددة '7'. يتم عرض بيان الإدخال 'حجم قائمة انتظار المعالجة المتعددة' قبل الحجم.

مثال 3: استخدام أسلوب 'Put ()' و 'Get ()' في قائمة معالجة Python المتعددة

يتم استخدام أساليب قائمة الانتظار 'put ()' و 'get ()' من قائمة انتظار معالجة بايثون المتعددة في هذا المثال. نقوم بتطوير وظيفتين محددتين من قبل المستخدم في هذا المثال. في هذا المثال ، نحدد دالة لإنشاء عملية تنتج '5' أعداد صحيحة عشوائية. نستخدم أيضًا طريقة 'put ()' لإضافتها إلى قائمة الانتظار. يتم استخدام طريقة 'put ()' لوضع العناصر في قائمة الانتظار. بعد ذلك ، لاسترداد الأرقام من قائمة الانتظار وإرجاع قيمها ، نكتب وظيفة أخرى وندعوها أثناء الإجراء. نستخدم وظيفة 'get ()' لاسترداد الأرقام من قائمة الانتظار حيث يتم استخدام هذه الطريقة لاسترداد البيانات من قائمة الانتظار التي ندرجها باستخدام طريقة 'put ()'.

فلنبدأ في تنفيذ الشفرة الآن. أولاً ، نقوم باستيراد المكتبات الأربع التي يتألف منها هذا البرنامج النصي. نقوم أولاً باستيراد كلمة 'sleep' من وحدة الوقت لتأخير التنفيذ لبعض الوقت المقاس بالثواني ، متبوعًا بـ 'عشوائي' من الوحدة العشوائية التي تُستخدم لتوليد أرقام عشوائية ، ثم 'معالجة' من المعالجة المتعددة لأن هذا الرمز ينشئ عملية ، وأخيرًا ، 'قائمة الانتظار' من المعالجة المتعددة. من خلال إنشاء مثيل فئة في البداية ، يمكن استخدام قائمة الانتظار. بشكل افتراضي ، يؤدي هذا إلى إنشاء قائمة انتظار لا نهائية أو قائمة انتظار بدون حد أقصى للحجم. من خلال تعيين خيار الحد الأقصى للحجم على رقم أكبر من الصفر ، من الممكن إنشاء إنشاء مع تقييد الحجم.


نحدد وظيفة. بعد ذلك ، نظرًا لأن هذه الوظيفة معرّفة من قبل المستخدم ، فإننا نطلق عليها اسم 'function1' ونمرّر المصطلح 'queue' كوسيطة لها. بعد ذلك ، نستدعي وظيفة 'print ()' ، ونمررها عبارات 'builder: Running' و 'flush' و 'True' للكائن. تحتوي وظيفة طباعة Python على خيار فريد يسمى flush يتيح للمستخدم اختيار تخزين هذا الإخراج مؤقتًا أم لا. الخطوة التالية هي إنشاء المهمة. للقيام بذلك ، نستخدم 'for' وننشئ المتغير 'm' ونضبط النطاق على '5'. ثم ، في السطر التالي ، استخدم 'random ()' وتخزين النتيجة في المتغير الذي صنعناه وهو 'value'. يشير هذا إلى أن الوظيفة تنتهي الآن من تكراراتها الخمسة ، حيث ينشئ كل تكرار عددًا صحيحًا عشوائيًا من 0 إلى 5.

ثم ، في الخطوة التالية ، نسمي وظيفة 'sleep ()' ونمرر وسيطة 'value' لتأخير الجزء لعدد معين من الثواني. بعد ذلك ، نطلق على 'قائمة الانتظار' طريقة 'put ()' لإضافة القيمة بشكل أساسي إلى قائمة الانتظار. يتم إعلام المستخدم بعد ذلك أنه لا يوجد عمل آخر يتعين القيام به عن طريق استدعاء طريقة 'queue.put ()' مرة أخرى وتمرير القيمة 'None'. بعد ذلك ، نقوم بتشغيل طريقة “print ()” ، ونمرر تعليمة builder: ready مع “flush” وضبطها على “True”.


نحدد الآن دالة ثانية ، 'function2' ، ونخصص الكلمة الأساسية 'queue' كوسيط لها. بعد ذلك ، نسمي وظيفة 'print ()' أثناء تمرير التقرير ينص على 'User: Running' و 'flush' التي تم ضبطها على 'True'. نبدأ تشغيل 'function2' باستخدام الشرط while true لإخراج البيانات من قائمة الانتظار ووضعها في متغير 'item' الذي تم إنشاؤه حديثًا. بعد ذلك ، نستخدم الشرط 'if' ، 'item is None' ، لمقاطعة الحلقة إذا كان الشرط صحيحًا. إذا لم يكن هناك عنصر متاح ، فإنه يتوقف ويطلب من المستخدم واحدًا. توقف المهمة الحلقة وتنتهي في هذه الحالة إذا كان العنصر الذي تم الحصول عليه من القيمة فارغًا. ثم ، في الخطوة التالية ، نسمي وظيفة 'print ()' ونوفر لها تقرير 'User: ready' و 'flush = True'.


بعد ذلك ، ندخل العملية الرئيسية باستخدام 'If-name = main_'. نقوم بإنشاء قائمة انتظار عن طريق استدعاء طريقة 'queue ()' وتخزينها في متغير 'queue'. بعد ذلك ، نقوم بإنشاء عملية عن طريق استدعاء وظيفة المستخدم “function2”. لهذا ، نسمي فئة 'العملية'. داخلها ، نقوم بتمرير 'target = function2' لاستدعاء الوظيفة في العملية ، وتمرير الوسيطة 'queue' ، وتخزينها في المتغير 'User_process'. تبدأ العملية بعد ذلك باستدعاء طريقة 'start ()' بمتغير 'User_ process'. ثم نكرر نفس الإجراء لاستدعاء الوظيفة 1 في العملية ووضعها في متغير 'عملية البناء'. بعد ذلك ، نسمي العمليات بالطريقة 'Join ()' لانتظار التنفيذ.


الآن وقد تم تقديمه ، يمكنك رؤية عبارات كلتا الوظيفتين في الإخراج. يعرض العناصر التي أضفناها باستخدام 'put ()' و 'get ()' باستخدام طرق 'get ()' ، على التوالي.

استنتاج

تعرفنا على قائمة انتظار المعالجة المتعددة بيثون في هذه المقالة. استخدمنا الرسوم التوضيحية المقدمة. في البداية ، وصفنا كيفية إنشاء قائمة انتظار في معالجة بايثون المتعددة باستخدام وظيفة قائمة الانتظار (). بعد ذلك ، استخدمنا طريقة 'qsize ()' لتحديد قوائم الانتظار. استخدمنا أيضًا أساليب الطابور put () و get (). تمت مناقشة كل من فئة النوم للوحدة الزمنية والفئة العشوائية للوحدة العشوائية في المثال الأخير.