• 0

كيف أنهي thread في البايثون ؟

هل أستطيع أن أنهي خيط (thread) قيد العمل بدون إحداث أية مشاكل في الموارد أو أية مشاكل على الخيوط (threads) الأخرى الموجودة في البرنامج ؟

تمّ تعديل بواسطة HardWord

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

في العادة يُعتبر إنهاء أحد الخيوط (thread) عادة سيئة سواء كان ذلك في البايثون أو في أي لغة أخرى للأسباب التالية:
- سيكون الخيط (thread) مرتبط بعدة موارد حيوية يجب أن يتم إغلاقها بشكل صحيح.
- يجب أن يتم أيضا إنهاء بقية الخيوط (threads) التي قام بإنشائها هذا الخيط.
لذلك ينصح بأن تتعامل مع هذه المشكلة عن طريق إنشاء تابع الخروج الذي سوف يوقف الخيط (thread) بالطريقة الصحيحة كما في المثال التالي:

import threading

class StoppableThread(threading.Thread):
    """Thread class with a stop() method. The thread itself has to check
    regularly for the stopped() condition."""

    def __init__(self):
        super(StoppableThread, self).__init__()
        self._stop = threading.Event()

    def stop(self):
        self._stop.set()

    def stopped(self):
        return self._stop.isSet()

في هذا المثال يجب عليك أن تقوم بتشغيل stop حتى يتم إنهاء البرنامج.
يذكر أنه لا توجد API رسمي لإغلاق الخيوط (threads).
أما لو أردت إغلاق كامل البرنامج فيجب عليك في هذه الحالة جعل الخيط (thread) بحالة daeamon عن طريق Thread.daemon.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن