English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تزامن وتجميع العمليات في Python

التوافق بين العمليات

المعالجة المتعددة هي مكتبة تدعم إنشاء برامج باستخدام واجهة البرمجة. تستخدم هذه المكتبة للتوازي المحلي والبعيد. يمكن للمبرمج استخدام عدة معالجات على جهاز معين باستخدام هذا الم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
أنت قد تعجبك