2016-04-09 7 views
6

मैं एक कार्यक्रम इस library का उपयोग करता है मूल रूप से बहुत ही सरल कुछ करता है, इसपायथन प्रोग्राम जो ब्लॉक 6% CPU लेता है?

receiver = multicast.MulticastUDPReceiver ("192.168.0.2", symbolMCIPAddrStr, symbolMCPort) 
    while True: 
      print 'Spinning' 
      try: 
        b = MD() 

        data = receiver.read(1024) 

रिसीवर सॉकेट ब्लॉक की तरह जब तक डेटा में आता है, इसलिए print 'Spinning' केवल प्रिंट एक बार डेटा सॉकेट पर प्राप्त होने तक। जब मैं ओएस कितना सीपीयू इस प्रक्रिया को ले जा रहा है, भले ही यह प्राप्त पर इंतज़ार कर रहा है पूछते हैं, इसके साथ वापस आता है:

[[email protected] ~]$ ps -p 4294 -o %cpu,%mem,cmd 
%CPU %MEM CMD 
6.3 0.4 python ./mc.py -s EUR/USD 
[[email protected] ~]$ 

वास्तव में, मैं इन प्रक्रियाओं के कई दो सीपीयू के साथ अपने कंप्यूटर चलाते हैं, और 8 कोर प्रत्येक, सभी कोर 100% उपयोग पर जाते हैं और कंप्यूटर अनुपयोगी हो जाता है।

मुझे "अवरुद्ध" के पायथन की धारणा को गलत समझा जाना चाहिए क्योंकि यहां तक ​​कि कुछ भी प्रक्रिया नहीं है जो मूल रूप से सो रही है, बहुत सी सीपीयू ले रही है।

क्या यह लिखने का एक और सही तरीका है ताकि प्रोग्राम जो मूल रूप से प्रतीक्षा कर रहे हैं I/o [इंटरप्ट-संचालित] CPU को छोड़ दें?

+0

एफडब्ल्यूआईडब्ल्यू, मैंने अभी गोलांग में एक बहुत ही समान कार्यक्रम को कोड किया है, और सीपीयू उपयोग की अपेक्षा की जाती है जब कोई डेटा प्रक्रियाओं में नहीं आता है, लगभग शून्य। – Ivan

+0

मुझे हालांकि जोड़ना चाहिए, कि मैंने जाने कोड को "संकलित" किया। मुझे विश्वास है कि इसमें से अधिकांश पाइथन दुभाषिया ओवरहेड है। – Ivan

+0

मैं हर दिन और पायथन कम पर भरोसा करता हूं क्योंकि गो में अनुकूलित कोड लिखना इतना सुविधाजनक है। – user161778

उत्तर

0

आपने एक पूरा उदाहरण पोस्ट नहीं किया है, इसलिए यह सुनिश्चित करना मुश्किल है कि क्या हो रहा है।

हालांकि, मुझे लगता है कि आपके लूप के अंदर try ब्लॉक है और आपका नेटवर्किंग कोड try ब्लॉक के अंदर है। मुझे नहीं पता कि आपका अपवाद हैंडलिंग क्या करता है। हालांकि, मुझे लगता है कि यह अनजाने में एक महत्वपूर्ण त्रुटि निगलने जैसा कुछ करता है। आपका लूप फिर से चलता है और शायद एक ही त्रुटि उत्पन्न करता है। इस तरह, कार्यक्रम वास्तव में व्यस्त-लूपिंग है, भले ही आपने सोचा था कि यह सो रहा था, I/O पर अवरुद्ध था।

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