2013-04-17 3 views
7

मैं concurrent.futures का उपयोग शुरू करने के लिए एक चल रही प्रक्रिया को कैसे समाप्त कर सकता हूं? जैसा कि मैं समझता हूं, cancel() विधि कतार से प्रक्रिया को निकालने के लिए है, यदि यह नहीं चल रहा है। लेकिन एक चल रही प्रक्रिया को मारने के बारे में क्या? उदाहरण के लिए, यदि मेरे पास लंबी चल रही प्रक्रिया है, और जब मैं एक जीयूआई में एक रद्द बटन दबाता हूं तो मैं इसे रोकना चाहता हूं।क्या समवर्ती.फ्यूचर में चल रही प्रक्रिया को रोकने का कोई तरीका है?

उत्तर

0

इस मामले में यह लंबे समय तक चलने वाले कार्य के लिए multiprocessing.Process का उपयोग करना बेहतर होगा।

नई प्रक्रिया शुरू करने से पहले बनाएँ। बच्चे की प्रक्रिया नियमित रूप से Event की स्थिति की जांच करें, और Event.is_set()True पर लौटने पर इसे बाहर निकालें।

अपने जीयूआई कोड में, Event पर बटन कॉल set() से जुड़े कॉलबैक को कॉल करें।

0

आप संबंधित स्टैक ओवरफ़्लो प्रश्न here पर मेरे उत्तर को देखना चाहते हैं।

संक्षेप में, concurrent.futures.ProcessPoolExecutor के अंदर चल रही प्रक्रिया को रद्द करने का एक आसान तरीका प्रतीत नहीं होता है। लेकिन आप इसे बाल प्रक्रियाओं को मैन्युअल रूप से मारकर हैकी तरीके से पूरा कर सकते हैं।

संबंधित मुद्दे