English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
دعم حزمة معالجة متعددة لإنشاء عملية. إنه يشير إلى دالة تحميل وتنفيذ عملية فرعية جديدة. من أجل إيقاف أو استمرار تنفيذ الحوسبة المتوازية، يجب على عملية الحالية استخدام واجهة API مشابهة لمodule thread لانتظار.
عندما نستخدم Multiprocessing، يجب أولاً إنشاءالعمليةالجسم. ثم، يتكلم عنstart()
الطريقة.
من مكتبة multiprocessing استورد Process تعريف display(): طبع ('Hi !! I am Python') if __name__ == '__main__': p = Process(target=display) p.start() p.join()
في هذا المثال، أولاً نقوم بتصدير كلاس Process، ثم نستخدم هذاdisplay()
تقوم ببدء عملية Process.
ثم، باستخدامstart()
تبدأ العملية، ثم تستخدم هذاjoin()
تم إكمال العملية.
يمكننا أيضًا استخدام مفتاح args لنقل المعلمات إلى الدالة.
من مكتبة multiprocessing استورد Process تعريف display(my_name): طبع ('Hi !!!' + " " + my_name) if __name__ == '__main__': p = Process(target=display, args=('Python',)) p.start() p.join()
في هذا المثال، نقوم بإنشاء عملية تcalculate مكعب الرقم وتطبع جميع النتائج على الشاشة.
من مكتبة multiprocessing استورد Process تعريف cube(x): للمسار x في my_numbers: طبع('%s مكعب هو %s' % (x, x**3)) if __name__ == '__main__': my_numbers = [3, 4, 5, 6, 7, 8] p = Process(target=cube, args=('x',)) p.start() p.join طبع ('انه تم')
نتائج الخروج
تمام 3 كوبي هو 27 مكعب 4 هو 64 مكعب 5 هو 125 مكعب 6 هو 216 مكعب 7 هو 343 مكعب 8 هو 512
يمكننا أيضًا إنشاء عدة عمليات دفعة واحدة.
في هذا المثال، أولاً نقوم بإنشاء عملية، وهي process1، تقوم بحساب مكعب عدد واحد، في نفس الوقت، يتم إنشاء عملية ثانية process2 لتحديد ما إذا كان العدد زوجيًا أو فرديًا.
من مكتبة multiprocessing استورد Process تعريف cube(x): للمسار x في my_numbers: طبع('%s مكعب هو %s' % (x, x**3)) تعريف evenno(x): للمسار x في my_numbers: إذا x % 2 == 0: طبع('%s هو عدد زوجي ' % (x)) if __name__ == '__main__': my_numbers = [3, 4, 5, 6, 7, 8] my_process1 = Process(target=cube, args=('x',)) my_process2 = Process(target=evenno, args=('x',)) my_process1.start() my_process2.start() my_process1.join() my_process2.join() طبع ('انه تم')
نتائج الخروج
3 كوبي هو 27 مكعب 4 هو 64 مكعب 5 هو 125 مكعب 6 هو 216 مكعب 7 هو 343 مكعب 8 هو 512 4 هو عدد زوجي 6 هو عدد زوجي 8 هو عدد زوجي تمام
يدعم معالجة متعددة الأنابيب والصفوف، وهي نوعان من قنوات التواصل بين العمليات.
في معالجة متعددة، عندما نريد التواصل بين العمليات، في هذه الحالة يمكننا استخدام الباب.الباب。
from multiprocessing import Process, Pipe def myfunction(conn): conn.send(['hi!! I am Python']) conn.close() if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target=myfunction, args=(child_conn,)) p.start() print (parent_conn.recv() ) p.join()
نتائج الخروج
['hi !!! I am Python']
يعود بوقتي اتصالين عبر الباب، يمثل كل منهما طرفي الباب. يحتوي كل كائن اتصال على طريقتينsend()
، واحدة هيrecv()
طريقة واحدة هي الطريقة، وثانية هي الطريقة.
في هذا المثال، أولاً نقوم بإنشاء عملية تُطبع الرسالة “ hi !! I am Python”, ثم مشاركة البيانات.
عندما ننقل البيانات بين العمليات، في هذه الحالة يمكننا استخدام كائن Queue.
import multiprocessing def evenno(numbers, q): for n in numbers: if n % 2 == 0: q.put(n) if __name__ == "__main__": q = multiprocessing.Queue() p = multiprocessing.Process(target=evenno, args=(range(10), q)) p.start() p.join() while q: print(q.get())
نتائج الخروج
0 2 4 6 8
في هذا المثال، أولاً نقوم بإنشاء دالة لتحقق من ما إذا كان الطقس عدد زوجي. إذا كان الرقم زوجيًا، نقوم بإدخاله في نهاية الصف. ثم، ننشئ كائنًا للاختبارات وكائنًا للسلسلة، ونبدأ في التشغيل.
في النهاية، نقوم بالتحقق من أن الليستة فارغة.
عندما نقوم بطباعة الأرقام، نقوم أولاً بطباعة القيمة التي تأتي في مقدمة الليستة، ثم الطباعة التالية، وهكذا.
في هذه الحالة، إذا كنا نريد تنفيذ عملية واحدة فقط في كل مرة، فإننا نستخدم Locks. هذا يعني أن الوقت سيمنع تنفيذ العمليات الأخرى للكود المماثل. بعد اكتمال العملية، يتم إطلاق القفل.
from multiprocessing import Process, Lock def dispmay_name(l, i): l.acquire() print('Hi', i) l.release() if __name__ == '__main__': my_lock = Lock() my_name = ['Aadrika', 'Adwaita', 'Sakya', 'Sanj'] for name in my_name: Process(target=dispmay_name, args=(my_lock,name)).start()
نتائج الخروج
Hi Aadrika Hi Adwaita Hi Sakya Hi Sanj
يقدم مكتبة الإدارة المتعددة أيضًا مكتبة تسجيل، لضمان عدم خلط الرسائل بين العمليات أثناء التنفيذ إذا لم يستخدم مكتبة تسجيل ميزة القفل.
import multiprocessing, logging logger = multiprocessing.log_to_stderr() logger.setLevel(logging.INFO) logger.warning('Error has occurred')
في هذا المثال، أولاً نقوم ب导入 مكتبات التسجيل والإدارة المتعددة، ثم نستخدم طريقة multiprocessing.log_to_stderr(). بعد ذلك، نكلم get_logger() ونضعه في sys.stderr، وأخيرًا نضبط مستوى السجل وننقل الرسالة.