2024-04-29 12:18:49 发布
网友
Socket模块有一个socket.recv_into方法,因此它可以使用用户定义的bytebuffer(类似于bytearray)进行零拷贝。但也许{}没有这样的方法。有没有一种方法可以在asyncio中使用socket.recv_into这样的方法?在
socket.recv_into
bytebuffer
bytearray
更新:从python3.7.0开始,在我写这篇文章时,它是alpha版本,标准库的asyncio模块文档AbstractEventLoop.sock_接收到(). 在
编辑:按要求展开答案。。。在
对asyncio的sock_recv_into()的调用通常如下所示:
sock_recv_into()
byte_count = await loop.sock_recv_into(sock, buff)
buff是一个实现Python缓冲区协议的可变对象,其示例包括bytearray和bytearray上的memoryview。下面的代码演示使用memoryview接收到bytearray。在
asyncialsockets的工作演示代码必须包含一组脚手架,用于设置连接的两侧并运行事件循环。这里的重点是在下面的sock_read_exactly()co例程中使用asyncio的sock_recv_into()。在
您可以实现自己的异步传输,它利用.recv_into()函数,但是是的,目前asyncio还没有一种现成使用.recv_into()的方法。在
.recv_into()
就我个人而言,我怀疑是否有很大的加速:当你用C开发时,零拷贝是极其重要的,但是对于像Python这样的高级语言来说,好处要少得多。在
为BaseEventLoop定义的低级套接字操作需要传入socket.socket对象,例如BaseEventLoop.sock_recv(sock, nbytes)。所以,假设你有一个socket.socket,你可以调用sock.recv_into()。这样做是否好是另一个问题。在
BaseEventLoop
socket.socket
BaseEventLoop.sock_recv(sock, nbytes)
sock.recv_into()
更新:从python3.7.0开始,在我写这篇文章时,它是alpha版本,标准库的asyncio模块文档AbstractEventLoop.sock_接收到(). 在
编辑:按要求展开答案。。。在
对asyncio的
sock_recv_into()
的调用通常如下所示:buff是一个实现Python缓冲区协议的可变对象,其示例包括bytearray和bytearray上的memoryview。下面的代码演示使用memoryview接收到bytearray。在
asyncialsockets的工作演示代码必须包含一组脚手架,用于设置连接的两侧并运行事件循环。这里的重点是在下面的sock_read_exactly()co例程中使用asyncio的sock_recv_into()。在
^{pr2}$您可以实现自己的异步传输,它利用
.recv_into()
函数,但是是的,目前asyncio还没有一种现成使用.recv_into()
的方法。在就我个人而言,我怀疑是否有很大的加速:当你用C开发时,零拷贝是极其重要的,但是对于像Python这样的高级语言来说,好处要少得多。在
为
BaseEventLoop
定义的低级套接字操作需要传入socket.socket
对象,例如BaseEventLoop.sock_recv(sock, nbytes)
。所以,假设你有一个socket.socket
,你可以调用sock.recv_into()
。这样做是否好是另一个问题。在相关问题 更多 >
编程相关推荐