python socket recv 阻塞_为什么python async awit 遇到socket.recv阻塞不会切换到其他任务?...

不知道你的 self.recv() 是如何写的,源代码中 create_connection (创建 tcp 连接的方法) 返回的 reader是这样实现的:async def _wait_for_data(self, func_name):# 调用通道的 resume_reading 方法,然后等待 数据传输过来(等待 feed_data() or feed_eof() 被调用,self._wa...
摘要由CSDN通过智能技术生成

不知道你的 self.recv() 是如何写的,源代码中 create_connection (创建 tcp 连接的方法) 返回的 reader是这样实现的:

async def _wait_for_data(self, func_name):

# 调用通道的 resume_reading 方法,然后等待 数据传输过来(等待 feed_data() or feed_eof() 被调用,self._waiter 就可以结束等待了)

"""Wait until feed_data() or feed_eof() is called.

If stream was paused, automatically resume it.

"""

if self._waiter is not None:

raise RuntimeError(

f'{func_name}() called while another coroutine is '

f'already waiting for incoming data')

assert not self._eof, '_wait_for_data after EOF'

# Waiting for data while paused will make deadlock, so prevent it.

# This is essential for readexactly(n) for case when n > self._limit.

if self._paused: # 如果现在是暂停状态

self._paused = False # 修改为False

self._transport.resume_reading()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值