تنفيذ multiprocessing subprocess في بايثون لإرجاع مولد
في عالم البرمجة بلغة بايثون، تعد البرمجة المتعددة العمليات من الأساليب الفعالة لتحسين الأداء عند التعامل مع المهام التي تتطلب وقتًا طويلًا. تتضمن هذه الطريقة استخدام عمليات متعددة لضمان تنفيذ المهام بشكل متزامن، مما يوفر وقتًا وجهدًا كبيرين. في هذا المقال، سوف نستعرض كيفية تطبيق subprocess متعدد المعالجة يعيد مولدان، وسنقدم بعض الأمثلة العملية التي توضح ذلك.
ما هي البرمجة المتعددة العمليات في بايثون؟
البرمجة المتعددة العمليات هي تقنية تسمح للمبرمجين بتقسيم المهام إلى عمليات متعددة يمكن أن تعمل على وحدات معالجة منفصلة. في بايثون، يتم ذلك باستخدام مكتبة multiprocessing
. هذه المكتبة توفر واجهة سهلة الاستخدام لإنشاء عمليات جديدة وإدارتها.
إنشاء فئة مع مهام متعددة
لنبدأ بإنشاء فئة بسيطة في بايثون، حيث سيتم تصميم هذه الفئة لأداء مهمتين: الأولى هي توليد نصوص باستخدام واجهة API، والثانية هي تنفيذ استعلامات على قاعدة بيانات MongoDB. إليك نموذج لهذه الفئة:
from multiprocessing import Pool
from pymongo import MongoClient
import time
class MyClass:
def __init__(self):
pass
def create(self):
llm = LLM_Collection()
resp = llm.call_llm_openai_cli("kimi", [{"role": "user", "content": "hello"}], stream=True)
for chunk in resp:
if not chunk.choices:
continue
print(chunk.choices[0].delta.content)
def some_task(self):
print("******************************* لقد نمت ******************************")
time.sleep(2)
print("******************************* استيقظت ******************************")
return "تم الانتهاء من النوم"
def main(self):
with Pool(processes=2) as pool:
task_proc = pool.apply_async(self.some_task)
generator = self.create()
for message in generator:
print(message)
task_res = task_proc.get()
print(task_res)
تشغيل المهام بالتوازي
في المثال السابق، نقوم بتنفيذ مهمتين بشكل متزامن. نقوم باستخدام Pool.apply_async
لتشغيل some_task
في عملية منفصلة، بينما نستدعي create
في نفس العملية الأساسية. هنا تكمن الفكرة الرئيسية التي تبحث عنها في تنفيذ subprocess متعدد المعالجة يعيد مولّدًا.
استدعاء الدالة main
من كودنا سيؤدي إلى تنفيذ المهام في وضع مطابق للمتطلبات التي ذكرناها. ولكن هناك بعض الأشياء التي يجب الانتباه إليها. أولاً، نحتاج إلى التأكد من أن الجيل المتزامن يتم بالطريقة الصحيحة.
التحديات المحتملة
عند القيام بذلك، قد تواجه بعض التحديات. على سبيل المثال، من الممكن أن لا تظهر أي مخرجات عند تنفيذ main()
نظرًا لأن العملية قد لا تُدار بشكل صحيح. يجب التأكد من أن جميع العمليات تعمل بشكل متزامن وتعيد العديد من النتائج التي يمكن معالجتها لاحقًا.
الخلاصة
قمنا في هذا المقال باستعراض كيفية استخدام البرمجة المتعددة العمليات بلغة بايثون لإنشاء subprocess يعيد مولدًا. هذا الأسلوب يعمل على تحسين الأداء من خلال تنفيذ المهام بالتوازي، الأمر الذي يعد ذو فائدة كبيرة في حالة التعامل مع عمليات زمنية طويلة مثل استعلامات قواعد البيانات أو استدعاء واجهات API. باستخدام هذه التقنيات، يمكنك تحسين كودك وجعله أكثر كفاءة.
إذا كنت تسعى لتعلم كيفية تنفيذ subprocess متعدد المعالجة يعيد مولدًا، فإن المعرفة بالمكتبة multiprocessing
ومعالجة البيانات المتدفقة ستمنحك الأدوات اللازمة للنجاح في ذلك. استمتع ببرمجة بايثون وتطبيق ما تعلمته في مشاريعك المستقبلية.