Iva*_*van 6 python sockets performance process blocking
我有一个使用这个库的程序基本上做了一些非常简单的事情,就像这样
receiver = multicast.MulticastUDPReceiver ("192.168.0.2", symbolMCIPAddrStr, symbolMCPort )
while True:
print 'Spinning'
try:
b = MD()
data = receiver.read(1024)
Run Code Online (Sandbox Code Playgroud)
接收器套接字阻塞,直到数据进入,因此print 'Spinning'只有在套接字上接收数据之前才会打印一次.当我向操作系统询问这个过程需要多少CPU时,即使它正在等待接收,它还会返回:
[idf@node1 ~]$ ps -p 4294 -o %cpu,%mem,cmd
%CPU %MEM CMD
6.3 0.4 python ./mc.py -s EUR/USD
[idf@node1 ~]$
Run Code Online (Sandbox Code Playgroud)
事实上,如果我运行其中的几个进程,我的计算机每个都有两个CPU和8个内核,所有内核都会达到100%的使用率,而计算机也无法使用.
我必须误解python的"阻塞"概念,因为即使是一个基本上没有睡觉的无处理过程占用了大量的CPU.
是否有更正确的方法来编写它,以便基本上等待I/O [中断驱动]的程序放弃CPU?
您还没有发布完整的示例,因此很难确定发生了什么。
try但是,我看到循环内有一个块,并且您的网络代码位于该try块内。我不知道你的异常处理是做什么的。然而,我猜它会像无意中吞下一个重要的错误一样。然后您的循环再次运行并可能会生成相同的错误。这样,程序实际上处于忙循环状态,即使您认为它处于睡眠状态,并且阻塞了 I/O。
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |