python queue get 方法_为什么Python的queue.Queue.get()允许从超时中提前返回?

更新:这个问题基于Queue.get()实际行为的错误心智模型,这是由一些略微模糊的文档引起的,但主要是由timedelta.total_seconds()的错误的手动实现引起的.当我试图证明原始答案不正确时,我发现了这个错误.现在timedelta.total_seconds()由

Python提供(自2.7起),我将继续使用它.

对困惑感到抱歉.

这不是“我的代码为什么不运行?”问题,但“这个设计决定背后的动机是什么?”

从2.3开始,Python的队列模块包含一个带有get方法的Queue类,它接受一个timeout参数.这是手册中的部分:

Queue.get([block[, timeout]])

Remove and return an item from the queue. If optional args block is true and timeout is None (the default), block if necessary until an item is available. If timeout is a positive number, it blocks at most timeout seconds and raises the Empty exception if no item was available within that time. […]

(强调我的)

请注意,即使尚未达到超时,它也可能引发Empty异常.事实上,我在Ubuntu(但不是Windows)上看到了这种行为.它只是提前退出,它对我的​​代码产生了轻微的影响 – 我可以编写代码.

大多数阻塞超时都会占用最小超时,这在非实时操作系统(包括Windows和Linux)上是有意义的.无法保证操作系统在任何给定的截止日期之前将上下文切换到您的进程或线程.

但是,这个最大超时.任何人都可以解释这个设计决定可能有意义吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值