मैं पायथन में एक थ्रेडेड प्रोग्राम लिख रहा हूं। यह प्रोग्राम उपयोगकर्ता (सीआरटीएल + सी) इंटरैक्शन द्वारा, और विभिन्न सिग्नल भेजने वाले अन्य कार्यक्रमों द्वारा अक्सर बाधित होता है, जिनमें से सभी को विभिन्न तरीकों से थ्रेड ऑपरेशन को रोकना चाहिए। थ्रेड अनुक्रम में काम की इकाइयों का एक गुच्छा करता है (मैं उन्हें "परमाणु" कहते हैं)।पायथन में एक रोकने योग्य धागा बनाने के लिए "सही" तरीका क्या है, जो काम के स्टॉपपेबल छद्म-परमाणु इकाइयों को दिया गया है?
प्रत्येक परमाणु को जल्दी और सुरक्षित रूप से रोका जा सकता है, इसलिए थ्रेड स्वयं को रोकना काफी मामूली है, लेकिन मेरा सवाल यह है: स्टॉपपेबल थ्रेड को लागू करने के लिए "दाएं" या कैननिकल तरीका क्या है, स्टॉपपेबल, छद्म- काम के परमाणु टुकड़े किए जाने के लिए?
क्या मुझे प्रत्येक परमाणु (उदाहरण के नीचे) से पहले stop_at_next_check
ध्वज मतदान करना चाहिए? क्या मुझे प्रत्येक परमाणु को कुछ ऐसी चीज से सजाना चाहिए जो ध्वज-जांच (मूल रूप से उदाहरण के समान ही है, लेकिन सजावट में छिपा हुआ है)? या मुझे किसी अन्य तकनीक का उपयोग करना चाहिए जिस पर मैंने सोचा नहीं है?
उदाहरण (सरल बंद कर दिया-ध्वज की जाँच):
class stoppable(Thread):
stop_at_next_check = False
current_atom = None
def __init__(self):
Thread.__init__(self)
def do_atom(self, atom):
if self.stop_at_next_check:
return False
self.current_atom = atom
self.current_atom.do_work()
return True
def run(self):
#get "work to be done" objects atom1, atom2, etc. from somewhere
if not do_atom(atom1):
return
if not do_atom(atom2):
return
#...etc
def die(self):
self.stop_at_next_check = True
self.current_atom.stop()