मैं एक कार्यक्रम इस 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 को छोड़ दें?
एफडब्ल्यूआईडब्ल्यू, मैंने अभी गोलांग में एक बहुत ही समान कार्यक्रम को कोड किया है, और सीपीयू उपयोग की अपेक्षा की जाती है जब कोई डेटा प्रक्रियाओं में नहीं आता है, लगभग शून्य। – Ivan
मुझे हालांकि जोड़ना चाहिए, कि मैंने जाने कोड को "संकलित" किया। मुझे विश्वास है कि इसमें से अधिकांश पाइथन दुभाषिया ओवरहेड है। – Ivan
मैं हर दिन और पायथन कम पर भरोसा करता हूं क्योंकि गो में अनुकूलित कोड लिखना इतना सुविधाजनक है। – user161778