मुझे एहसास है कि "तेज़" थोड़ा सा व्यक्तिपरक है इसलिए मैं कुछ संदर्भ के साथ समझाऊंगा। मैं क्रॉस-प्लेटफार्म तरीके से प्रक्रिया की जानकारी पढ़ने के लिए psutil नामक एक पायथन मॉड्यूल पर काम कर रहा हूं। यह निर्धारित करने के लिए कि कोई पीआईडी वर्तमान प्रक्रिया सूची में है या नहीं, कार्यों में से एक pid_exists(pid)
फ़ंक्शन है।यह निर्धारित करने का तेज़ तरीका है कि एक पीआईडी (विंडोज) पर मौजूद है या नहीं?
अभी प्रक्रिया प्रक्रिया खींचने के लिए EnumProcesses() का उपयोग करके, मैं सूची के माध्यम से बातचीत कर रहा हूं और पीआईडी की तलाश में यह स्पष्ट तरीका कर रहा हूं। हालांकि, कुछ सरल बेंचमार्किंग से पता चलता है कि यह यूनिक्स-आधारित प्लेटफ़ॉर्म (लिनक्स, ओएस एक्स, फ्रीबीएसडी) पर pid_exists फ़ंक्शन से नाटकीय रूप से धीमा है, जहां हम kill(pid, 0)
का उपयोग 0 सिग्नल के साथ कर रहे हैं यह निर्धारित करने के लिए कि कोई पीआईडी मौजूद है या नहीं। अतिरिक्त परीक्षण से पता चलता है कि यह एनमप्रोसेसेस है जो लगभग हर समय उठा रहा है।
कोई भी पीआईडी मौजूद है या नहीं, यह निर्धारित करने के लिए EnumProcesses का उपयोग करने से किसी को भी तेज़ तरीका पता है? मैंने OpenProcess() की कोशिश की और बिना किसी प्रक्रिया की प्रक्रिया को खोलने में त्रुटि की जांच की, लेकिन यह EnumProcesses सूची के माध्यम से पुनरावृत्ति से 4x धीमी हो गई, इसलिए यह भी बाहर है। कोई अन्य (बेहतर) सुझाव?
नोट: यह एक पायथन लाइब्रेरी है जिसका उद्देश्य तृतीय-पक्ष lib निर्भरताओं जैसे pywin32 एक्सटेंशन से बचने के लिए है। मुझे एक ऐसे समाधान की आवश्यकता है जो हमारे वर्तमान कोड से तेज़ है, और यह मानक पायथन वितरण में मौजूद नहीं है pywin32 या अन्य मॉड्यूल पर निर्भर नहीं है।
EDIT: स्पष्टीकरण के लिए - हम अच्छी तरह से जानते हैं कि पढ़ने की प्रक्रिया में अंतर्निहित दौड़ की स्थिति है। डेटा संग्रह के दौरान प्रक्रिया समाप्त होने पर हम अपवाद उठाते हैं या हम अन्य समस्याओं में भाग लेते हैं। Pid_exists() फ़ंक्शन उचित त्रुटि हैंडलिंग को प्रतिस्थापित करने का इरादा नहीं है।
अद्यतन: जाहिरा तौर पर मेरे पहले बेंचमार्क त्रुटिपूर्ण थे - मैं सी में कुछ साधारण परीक्षण ऐप्स और EnumProcesses लगातार बाहर आता है धीमी और OpenProcess (मामले में GetProcessExitCode साथ संयोजन के रूप में पीआईडी मान्य है, लेकिन प्रक्रिया बंद कर दिया है) वास्तव में है लिखा था बहुत तेज धीमी नहीं है।
मेरे पिछले परीक्षण के बावजूद बाहर निकलता है यह सब के बाद जाने का बेहतर तरीका है। रुचि रखते हैं तो विवरण के लिए मेरा जवाब देखें। – Jay