Tôi có một chương trình sử dụng library này về cơ bản làm điều gì đó rất đơn giản, như thế nàychương trình python mà khối mất 6% CPU?
khối ổ cắmreceiver = multicast.MulticastUDPReceiver ("192.168.0.2", symbolMCIPAddrStr, symbolMCPort)
while True:
print 'Spinning'
try:
b = MD()
data = receiver.read(1024)
Người nhận cho đến khi dữ liệu đi kèm trong, do đó print 'Spinning'
chỉ in một lần cho đến khi nhận được dữ liệu trên ổ cắm. Khi tôi hỏi hệ điều hành bao nhiêu CPU quá trình này đang diễn, mặc dù nó được chờ đợi trên nhận, nó trở lại với:
[[email protected] ~]$ ps -p 4294 -o %cpu,%mem,cmd
%CPU %MEM CMD
6.3 0.4 python ./mc.py -s EUR/USD
[[email protected] ~]$
Trong thực tế, nếu tôi chạy một số các quy trình, máy tính của tôi với hai CPU và 8 lõi, tất cả các lõi đều sử dụng 100% và máy tính trở nên không sử dụng được.
Tôi phải hiểu nhầm khái niệm của python về "chặn" vì thậm chí một quy trình không làm gì mà về cơ bản nên ngủ là chiếm rất nhiều CPU.
Có cách nào chính xác hơn để viết điều này để các chương trình cơ bản đang chờ i/o [ngắt hướng] từ bỏ CPU không?
FWIW, tôi vừa mã hóa một chương trình rất giống trong golang và việc sử dụng CPU như mong đợi khi không có dữ liệu nào đi vào các quy trình, gần như bằng không. – Ivan
Tôi nên thêm mặc dù, rằng tôi "biên soạn" mã đi. Tôi bắt đầu tin rằng phần lớn là thông dịch viên python. – Ivan
Tôi dựa vào Go nhiều hơn mỗi ngày và Python ít hơn vì nó rất thuận tiện để viết mã được tối ưu hóa trong Go. – user161778