我有一个程序,它使用这个library来做一些非常简单的事情,比如这样
receiver = multicast.MulticastUDPReceiver ("192.168.0.2", symbolMCIPAddrStr, symbolMCPort )
while True:
print 'Spinning'
try:
b = MD()
data = receiver.read(1024)
接收器套接字将一直阻塞,直到数据传入,因此print 'Spinning'
只打印一次,直到在套接字上接收到数据。当我询问操作系统此进程占用多少CPU时,即使它正在等待接收,它返回的结果是:
事实上,如果我运行这些进程中的几个,我的电脑有两个CPU和8个核心,所有的核心都会达到100%的使用率,计算机就会变得无法使用。在
我一定误解了python的“阻塞”概念,因为即使是基本上应该处于休眠状态的“不做任何事情”进程也会占用大量CPU。在
有没有一种更正确的方法来编写它,以便基本上等待i/o[中断驱动]的程序放弃CPU?在
您还没有发布完整的示例,因此很难确定发生了什么。在
但是,我看到在循环中有一个
try
块,网络代码在try
块中。我不知道你的异常处理是怎么做的。然而,我猜它会像无意中吞下一个重要的错误。然后循环再次运行,可能会生成相同的错误。这样,程序实际上正忙着循环,即使您认为它处于休眠状态,阻塞了I/O相关问题 更多 >
编程相关推荐