2016-04-09 11 views
6

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ắm
receiver = 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?

+0

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

+0

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

+0

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

Trả lời

0

Bạn chưa đăng một ví dụ hoàn chỉnh nên rất khó để nói chắc chắn điều gì đang xảy ra.

Tuy nhiên, tôi thấy rằng có một khối try bên trong vòng lặp của bạn và mã mạng của bạn nằm trong khối try. Tôi không biết xử lý ngoại lệ của bạn là gì. Tuy nhiên, tôi đoán nó làm một cái gì đó như vô ý nuốt một lỗi quan trọng. Vòng lặp của bạn sau đó chạy lại và có thể tạo ra cùng một lỗi. Bằng cách này, chương trình thực sự bận rộn-looping mặc dù bạn nghĩ rằng nó đang ngủ, chặn trên I/O.

Các vấn đề liên quan