У меня есть программа, которая использует этот library в основном делает что-то очень простое, как этотПрограмма python, которая блокирует 6% процессора?
receiver = multicast.MulticastUDPReceiver ("192.168.0.2", symbolMCIPAddrStr, symbolMCPort)
while True:
print 'Spinning'
try:
b = MD()
data = receiver.read(1024)
Приемник гнездовых блоков, пока данные не приходит, поэтому print 'Spinning'
только печатает один раз, пока данные не будут получены на сокете. Когда я спрашиваю ОС, сколько CPU этот процесс берет, даже если он ждет от приема, он возвращается с:
[[email protected] ~]$ ps -p 4294 -o %cpu,%mem,cmd
%CPU %MEM CMD
6.3 0.4 python ./mc.py -s EUR/USD
[[email protected] ~]$
В самом деле, если я запускаю некоторые из этих процессов, мой компьютер с двумя CPU и 8 ядер каждый, все ядра идут на 100% использования, и компьютер становится непригодным.
Я должен неправильно понимать понятие «блокирование» python, потому что даже ничего не делать, что в принципе должно спать, занимает много процессора.
Есть ли более правильный способ написать это, чтобы программы, которые в основном ждут ввода/вывода [прерывания, управляются], отказываются от процессора?
FWIW, я просто закодировал очень похожую программу в голанге, и использование ЦП будет таким, как ожидалось, когда никакие данные не войдут в процессы, почти равны нулю. – Ivan
Я должен добавить, что я «скомпилировал» код go. Я начинаю полагать, что большая часть из них - накладные расходы интерпретатора python. – Ivan
Я полагаюсь на Go больше каждый день, а Python меньше, так как так удобно писать оптимизированный код в Go. – user161778