"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ العمليات الفرعية غير المحظورة في بايثون؟

كيفية تنفيذ العمليات الفرعية غير المحظورة في بايثون؟

تم النشر بتاريخ 2024-11-27
تصفح:603

How to Execute Non-Blocking Subprocesses in Python?

استدعاء العملية الفرعية غير المحظورة

عند تنفيذ البرامج النصية الخارجية باستخدام subprocess.call، يعد الحفاظ على سير عمل غير محظور أمرًا ضروريًا لتجنب توقف البرنامج الرئيسي. تقدم هذه المقالة حلاً شاملاً لتحقيق هذا الهدف.

النهج باستخدام العملية الفرعية.Popen

الطريقة الأساسية لتنفيذ عملية فرعية غير محظورة هي استخدام العملية الفرعية.Popen بدلاً من subprocess.call. هذا البديل لا يمنع البرنامج الرئيسي، مما يسمح له بمواصلة عملياته بينما تعمل العملية الفرعية بشكل مستقل. إليك مثال:

subprocess.Popen(["python", "slave.py"]   sys.argv[1:])

مثال شامل

للحصول على عرض توضيحي كامل لاستدعاءات العمليات الفرعية غير المحظورة، ضع في اعتبارك الكود التالي:

import subprocess
import time

p = subprocess.Popen(['sleep', '5'])

while p.poll() is None:
    print('Still sleeping')
    time.sleep(1)

print('Not sleeping any longer.  Exited with returncode %d' % p.returncode)

ينفذ هذا الرمز أمر "النوم" بشكل غير متزامن، ويتحقق من حالته بشكل دوري حتى يكتمل.

بديل نهج غير متزامن

بالنسبة لإصدارات Python 3.5 وما فوق، يتضمن النهج الأكثر حداثة وكفاءة استخدام asyncio. فهو يسمح بالتزامن الحقيقي، مما يتيح تنفيذ مهام متعددة في وقت واحد. إليك مثال:

import asyncio

async def do_subprocess():
    print('Subprocess sleeping')
    proc = await asyncio.create_subprocess_exec('sleep', '5')
    returncode = await proc.wait()
    print('Subprocess done sleeping.  Return code = %d' % returncode)

async def sleep_report(number):
    for i in range(number   1):
        print('Slept for %d seconds' % i)
        await asyncio.sleep(1)

loop = asyncio.get_event_loop()

tasks = [
    asyncio.ensure_future(do_subprocess()),
    asyncio.ensure_future(sleep_report(5)),
]

loop.run_until_complete(asyncio.gather(*tasks))
loop.close()

يضمن هذا الأسلوب تشغيل كل من العملية الفرعية والبرنامج الرئيسي بشكل متزامن، مما يزيد من الأداء والاستجابة.

بيان الافراج أعيد طبع هذه المقالة على: 1729316657 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3