python 协程 并没有快_python协程超时

我怎样才能使一个合作进程停止超时?在

我不明白为什么asyncio.wait()对我不起作用。

我有这样一段代码(计划实现telnet客户端):def expect(self, pattern, timeout=20):

if type(pattern) == str:

pattern = pattern.encode('ascii', 'ignore')

return self.loop.run_until_complete(asyncio.wait_for(self.asyncxpect(pattern), timeout))

async def asyncxpect(self, pattern): #receives data in a cumulative way until match is found

regexp = re.compile(b'(?P[\s\S]*)(?P%s)' %pattern)

self.buffer = b''

while True:

# add timeout

# add exception handling for unexpectedly closed connections

data = await self.loop.sock_recv(self.sock, 10000)

self.buffer += data

m = re.match(regexp, self.buffer)

if m:

payload = m.group('payload')

match = m.group('pattern')

return payload, match

正如我所想的,在某个时刻(在await语句中)将控制权返回给事件循环。我认为应该在没有更多数据可接收时发生。

如果事件循环有控制权,它可以停止超时。在

但若服务器并没有发送任何有用的(匹配的)代码,我的代码就会在这个循环中出错,就在等待点。在

我认为它与这个问题Python asyncio force timeout不同,因为我没有使用像时间。睡觉(n) 一。在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值