English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
المعالجة المتعددة هي مكتبة تدعم إنشاء برامج باستخدام واجهة البرمجة. تستخدم هذه المكتبة للتوازي المحلي والبعيد. يمكن للمبرمج استخدام عدة معالجات على جهاز معين باستخدام هذا المodule. يمكن تشغيلها على نظامي التشغيل Windows و UNIX.
يحتوي هذا المجلد على جميع الكيانات المتكافئة للتوافق.
from multiprocessing import Process, Lock def my_function(x, y): x.acquire() print('hello world', y) x.release() if __name__ == '__main__': lock = Lock() for num in range(10): Process(target=my_function, args=(lock, num)).start()
في هذا المكان، يمكن حجز مثال لضمان أن يتم عرض إخراج المعالجة المعياري مرة واحدة فقط.
للمجموعات، نستخدم فئة Pool. عندما يمكن إنشاء مجموعة عمليات، فإنها ستتحمل جميع المهام التي يتم تقديمها لها.
فئة multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
يتحكم عملاق النمط في مجموعة العمليات لتختار المهام التي يمكن تقديمها، ويقوم بدعم نتائج متوازية، مع دعم الاستحقاق، والإشارات، وتحقيق الت映射 المتوازي.
إذا كان العملاق فارغًا، فإن cpu_count() يتم استدعاؤه؛ إذا تم تعيينه إلى غير none، يتم استدعاء هذا الدالة باستخدام initializer(* initargs).
apply(func[, args[, kwds]])
هذا يشابهapply()
مثل الميزة المدمجة. سيقوم هذا الطريقة بالحظر حتى يتم إعداد النتيجة، إذا كنت ترغب في التنفيذ بشكل متوازي، فإن طريقة apply_async() أفضل.
apply_async(func[, args[, kwds[, callback]]])
يعيد دالة النتيجة.
map(func،قابل للتكرار[،chunksize] )
map() هي دالة مدمجة تدعم فقط معامل قابل للتكرار واحد. إنها ستقوم بالحظر حتى يتم إعداد النتيجة.
في هذه الطريقة، يتم تقسيم القابلة للتكرار إلى العديد من قطع صغيرة، ويتم تقديم هذه القطع الصغيرة كمهام منفردة إلى مجموعة العمليات.
map_async(func،iterable [،chunksize [،callback]] )
يعيد دالة النتيجة.
imap(func،iterable [،chunksize] )
مثل itertools.imap().
حجم المعاملات يتطابق مع المعاملات المستخدمةmap()
.
imap_unordered(func،iterable [،chunksize] )
هذا يشابهimap()
يعيد ترتيب سلسلة التكرار بنفس الترتيب.
إغلاق.
عندما يكمل العامل جميع المهام، يغادر العامل عملية.
إيقاف.
إذا كنا نريد إيقاف عملية العمل على الفور دون إكمال المهام، فإننا نستخدم هذه الطريقة.
إنضمام()
باستخدامjoin()
قبل استخدامclose()
وterminate()
دالة.
فئة multiprocessing.pool.AsyncResult
من قبل Pool.apply_async() و Pool.map_async().
get ([الاستحقاق])
يستعيد هذا الدالة النتيجة عند الوصول.
الانتظار ([الاستحقاق])
نستخدم هذه الخاصية الإنتظار للانتظار حتى يصبح النتيجة متاحة أو حتى يمر الوقت المحدد بالثواني.
إعداد()
تقوم هذه الدالة بإرجاع ما إذا كانت النداء قد اكتمل.
نجاح()
بعد إكمال النداء، لن يحدث أي خطأ، وسيعود هذا الدالة.
# -*- coding: utf-8 -*- تم إنشاؤه في Sun Sep 30 12:17:58 2018 @author: oldtoolbag.com from multiprocessing import Pool import time def myfunction(m): return m*m if __name__ == '__main__': my_pool = Pool(processes=4) # تبدأ 4 عمليات عمال result = my_pool.apply_async(myfunction, (10,)) # يقييم "f(10)" بشكل متزامن في عملية واحدة print (result.get(timeout=1)) print (my_pool.map(myfunction, range(10))) # يطبع "[0, 1, 4,..., 81]" my_it = my_pool.imap(myfunction, range(10)) print (my_it.next()) # يطبع "0" print (my_it.next()) # يطبع "1" print (my_it.next(timeout=1)) # يطبع "4" ما لم يكن جهازك *بطيئًا* جدًا result = my_pool.apply_async(time.sleep, (10,)) print (result.get(timeout=1)) # يرفع خطأ multiprocess.TimeoutError