اذهب إلى المحتوى

السؤال

نشر (معدل)

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

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

Recommended Posts

  • 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.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...