اذهب إلى المحتوى

السؤال

نشر

 

من يتكرم و يشرح لي هذيهن الكودين يا ريت شرط وافي

1/

#!/usr/bin/env python3
from multiprocessing import Pool
def run(task):
  # Do something with task here
    print("Handling {}".format(task))
if __name__ == "__main__":
  tasks = ['task1', 'task2', 'task3']
  # Create a pool of specific number of CPUs
  p = Pool(len(tasks))
  # Start each task within the pool
  p.map(run, tasks)

2/

 

#!/usr/bin/env python3
import subprocess
from multiprocessing import Pool
import os

    src = "/data/prod/"
    dest = "/data/prod_backup/"

def run(dirname):
    subprocess.call(["rsync", "-arq", src + dirname, dest + dirname])

if __name__ == "__main__" :
    for root, dirs, files in os.walk(src):
        if len(dirs) > 0 : break
    p = Pool(len(dirs))
    p.map(run, dirs)

                       

 

 

Recommended Posts

  • 0
نشر (معدل)

ملاحظات عامة: البرمجة المتوازية هي تشغيل عدة برامج في نفس الوقت (Process or threads) ,وبدرجة أعلى تشغيل نفس البرنامج بشكل متواز و تقسيم العمل على عدة مسالك برمجية

  1. في أنظمة التشغيل كل برنامج يقوم بإنشاء Process خاصة به للقيام بالعمليات البرمجية.
  2. نستخدم عدة Processes في النظام الحاسوبي لكي نستطيع تقسيم الوقت و الموارد بين البرامج المختلفة بشكل مناسب.
  3. كل Process يمكن أن يكون لديها sub process أي عملية ابن لها يتحكم الأب فيه عن طريق إشارت تحكم (ويرسل الابن اشارات تحكم أيضا)
  • Pool: يوزع المجمع المهام على المعالجات المتاحة باستخدام جدولة FIFO (نظام الرتل). إنه يعمل مثل بنية map-reduce. يقوم بتعيين المدخلات إلى المعالجات المختلفة ويجمع المخرجات من جميع المعالجات (تنسيق عملية البرمجة المتوازية بين عدة Processes).
  • العملية Process  هي مثال على البرنامج (مثل دفتر Notepad، مترجم Python). تنشيئ العمليات المسالك (threads)(العمليات الفرعية) للتعامل مع المهام الفرعية مثل قراءة ضغطات المفاتيح ، وتحميل صفحات HTML ، وحفظ الملفات. المسالك تعيش داخل العمليات وتشترك في نفس مساحة الذاكرة.
    #!/usr/bin/env python3
    from multiprocessing import Pool   //  تضمين المكتبة الخاصة بالبرمجة المتعددة أي المتوازية
    def run(task):
      # Do something with task here
        print("Handling {}".format(task)) // Handling task1 طباعة اسم العملية مثل 
    if __name__ == "__main__":
      tasks = ['task1', 'task2', 'task3'] // تهيئة البرامج للتشغيل مع اسما افتراضية
      # Create a pool of specific number of CPUs
      p = Pool(len(tasks))    // إنشاء عدة معالجات بعدد العمليات المطلوبة
      # Start each task within the pool
      p.map(run, tasks)  // لكل واحدة من هذه المهمات لكي يقوم بتنفيذهم  (process handler) معالج الطلبات run إسناد التابع 

    # الجزء الثاني:

  • walk() في بيثون؟  walk() قم بإنشاء أسماء الملفات في شجرة الدليل عن طريق السير في الشجرة إما من أعلى إلى أسفل أو من أسفل إلى أعلى. لكل دليل في الشجرة جذر Root في أعلى الدليل (بما في ذلك الجزء العلوي نفسه) ، فإنه ينتج 3 متغيرات (المسارات و أسماء المجلدات و أسماء الملفات)  (dirpath ، dirnames ، filenames). الجذر: يطبع الدلائل فقط مما حددته.
  • الكود الثاني يقوم بإنشاء دليل للملفات و المجلدات التي جذرها هو src  لنسخ الملفات من المصدر src إلى الوجهة dest  بطريقة متوازية ( متزامنة عودية لكي لا يحدث خطأ في المسارات rsync)
  • rsync: remote sync (المزامنة عن بُعد) هي أداة مساعدة لنقل ومزامنة الملفات بكفاءة بين الكمبيوتر ووحدة تخزين خارجية
تم التعديل في بواسطة Wael Aljamal
  • 0
نشر

مرحبًا @Sami Remili,

#!/usr/bin/env python3
from multiprocessing import Pool
def run(task):
  # Do something with task here
    print("Handling {}".format(task))
if __name__ == "__main__":
  tasks = ['task1', 'task2', 'task3']
  # Create a pool of specific number of CPUs
  p = Pool(len(tasks))
  # Start each task within the pool
  p.map(run, tasks)

هذا الكود يقوم بإستدعاء دالة run و التي تقوم بعمل وظيفة ما مع تمرير قيمة لها .

الشرح:

#!/usr/bin/env python3

هذا السطر دائما يُكتب في اول الملف و يدعى shebang يفيد اذا كان لديك اكثر من اصدار في البايثون كما موضّح هنا يستعمل python 3.

from multiprocessing import Pool

هنا نستدعي الصنف Pool من المكتبة mutliprcessing , هي مكتبة متخصصة في مهام التزامن و إستدعاء دالة اكثر من مرّة في الوقت ذاته . 

def run(task):
  # Do something with task here
	print("Handling {}".format(task))

نقوم هنا بإنشاء الدلة run والتي تقوم فقط بطباعة القيمة التي تُمرر لها , run ستُستخدم من Pool لاحقً .

if __name__ == "__main__":
  tasks = ['task1', 'task2', 'task3']
  # Create a pool of specific number of CPUs
  p = Pool(len(tasks))
  # Start each task within the pool
  p.map(run, tasks)

هنا نقوم بإنشاء مصفوفة tasks التي تحمل القيم التي يتُمرر الى الدلة run , نقوم بإنشاء متغير من الدلة Pool و هو p , تقوم (len(tasks بإسترجاع  القيمة 3 و هو عدد عناصر tasks , الرقم 3 داخل Pool يعني أن p ستستعمل 3 نواة للعمل بها في التزامن .

p.map(run,tasks)

هنا الدلة map تحمل القيمة الآولى (الدالة) و القيمة الثانية (مصفوفة) , تعمل map على تفعيل الدلة run على كل قيمة في tasks.

كل هذا سيعمل فقط اذا هذا الشرط صحيح :

if __name__ == "__main__" :

هذا الشرط يشير الى ان الشيفرة هذه ستعمل في حال قمنا بتشغيل هذا الملف من ذاته , اما اذا قمنا بإستدعاء هذا الملف من ملف آخر فهذه الشيفرة لن تعمل .

  • 0
نشر
بتاريخ 17 ساعات قال Wael Aljamal:

ملاحظات عامة: البرمجة المتوازية هي تشغيل عدة برامج في نفس الوقت (Process or threads) ,وبدرجة أعلى تشغيل نفس البرنامج بشكل متواز و تقسيم العمل على عدة مسالك برمجية

  1. في أنظمة التشغيل كل برنامج يقوم بإنشاء Process خاصة به للقيام بالعمليات البرمجية.
  2. نستخدم عدة Processes في النظام الحاسوبي لكي نستطيع تقسيم الوقت و الموارد بين البرامج المختلفة بشكل مناسب.
  3. كل Process يمكن أن يكون لديها sub process أي عملية ابن لها يتحكم الأب فيه عن طريق إشارت تحكم (ويرسل الابن اشارات تحكم أيضا)
  • Pool: يوزع المجمع المهام على المعالجات المتاحة باستخدام جدولة FIFO (نظام الرتل). إنه يعمل مثل بنية map-reduce. يقوم بتعيين المدخلات إلى المعالجات المختلفة ويجمع المخرجات من جميع المعالجات (تنسيق عملية البرمجة المتوازية بين عدة Processes).
  • العملية Process  هي مثال على البرنامج (مثل دفتر Notepad، مترجم Python). تنشيئ العمليات المسالك (threads)(العمليات الفرعية) للتعامل مع المهام الفرعية مثل قراءة ضغطات المفاتيح ، وتحميل صفحات HTML ، وحفظ الملفات. المسالك تعيش داخل العمليات وتشترك في نفس مساحة الذاكرة.
    
    #!/usr/bin/env python3
    from multiprocessing import Pool   //  تضمين المكتبة الخاصة بالبرمجة المتعددة أي المتوازية
    def run(task):
      # Do something with task here
        print("Handling {}".format(task)) // Handling task1 طباعة اسم العملية مثل 
    if __name__ == "__main__":
      tasks = ['task1', 'task2', 'task3'] // تهيئة البرامج للتشغيل مع اسما افتراضية
      # Create a pool of specific number of CPUs
      p = Pool(len(tasks))    // إنشاء عدة معالجات بعدد العمليات المطلوبة
      # Start each task within the pool
      p.map(run, tasks)  // لكل واحدة من هذه المهمات لكي يقوم بتنفيذهم  (process handler) معالج الطلبات run إسناد التابع 

    # الجزء الثاني:

  • walk() في بيثون؟  walk() قم بإنشاء أسماء الملفات في شجرة الدليل عن طريق السير في الشجرة إما من أعلى إلى أسفل أو من أسفل إلى أعلى. لكل دليل في الشجرة جذر Root في أعلى الدليل (بما في ذلك الجزء العلوي نفسه) ، فإنه ينتج 3 متغيرات (المسارات و أسماء المجلدات و أسماء الملفات)  (dirpath ، dirnames ، filenames). الجذر: يطبع الدلائل فقط مما حددته.
  • الكود الثاني يقوم بإنشاء دليل للملفات و المجلدات التي جذرها هو src  لنسخ الملفات من المصدر src إلى الوجهة dest  بطريقة متوازية ( متزامنة عودية لكي لا يحدث خطأ في المسارات rsync)
  • rsync: remote sync (المزامنة عن بُعد) هي أداة مساعدة لنقل ومزامنة الملفات بكفاءة بين الكمبيوتر ووحدة تخزين خارجية

بارك الله فيك اخي 

بتاريخ 17 ساعات قال عزام عبد الحافظ:

مرحبًا @Sami Remili,


#!/usr/bin/env python3
from multiprocessing import Pool
def run(task):
  # Do something with task here
    print("Handling {}".format(task))
if __name__ == "__main__":
  tasks = ['task1', 'task2', 'task3']
  # Create a pool of specific number of CPUs
  p = Pool(len(tasks))
  # Start each task within the pool
  p.map(run, tasks)

هذا الكود يقوم بإستدعاء دالة run و التي تقوم بعمل وظيفة ما مع تمرير قيمة لها .

الشرح:


#!/usr/bin/env python3

هذا السطر دائما يُكتب في اول الملف و يدعى shebang يفيد اذا كان لديك اكثر من اصدار في البايثون كما موضّح هنا يستعمل python 3.


from multiprocessing import Pool

هنا نستدعي الصنف Pool من المكتبة mutliprcessing , هي مكتبة متخصصة في مهام التزامن و إستدعاء دالة اكثر من مرّة في الوقت ذاته . 


def run(task):
  # Do something with task here
	print("Handling {}".format(task))

نقوم هنا بإنشاء الدلة run والتي تقوم فقط بطباعة القيمة التي تُمرر لها , run ستُستخدم من Pool لاحقً .


if __name__ == "__main__":
  tasks = ['task1', 'task2', 'task3']
  # Create a pool of specific number of CPUs
  p = Pool(len(tasks))
  # Start each task within the pool
  p.map(run, tasks)

هنا نقوم بإنشاء مصفوفة tasks التي تحمل القيم التي يتُمرر الى الدلة run , نقوم بإنشاء متغير من الدلة Pool و هو p , تقوم (len(tasks بإسترجاع  القيمة 3 و هو عدد عناصر tasks , الرقم 3 داخل Pool يعني أن p ستستعمل 3 نواة للعمل بها في التزامن .


p.map(run,tasks)

هنا الدلة map تحمل القيمة الآولى (الدالة) و القيمة الثانية (مصفوفة) , تعمل map على تفعيل الدلة run على كل قيمة في tasks.

كل هذا سيعمل فقط اذا هذا الشرط صحيح :


if __name__ == "__main__" :

هذا الشرط يشير الى ان الشيفرة هذه ستعمل في حال قمنا بتشغيل هذا الملف من ذاته , اما اذا قمنا بإستدعاء هذا الملف من ملف آخر فهذه الشيفرة لن تعمل .

شرح مبسط اخي شكرا  و ماذا عن الكود الثاني 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...