gpt4 book ai didi

python - gevent,套接字和同步

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:54 25 4
gpt4 key购买 nike

我有多个 greenlets 在一个公共(public)套接字上发送。是否保证通过 socket.sendall 发送的每个包都很好地分开,或者我是否必须在每次调用 sendall 之前获取锁。

所以我想防止以下情况:

  • g1 发送 ABCD
  • g2 发送 1234
  • 接收到的数据是混淆的,例如AB1234CD
  • 预期是 ABCD12341234ABCD

更新

看了sourcecode之后我认为这种情况不可能发生。但我必须使用锁,因为 g1 或 g2 可能会在 sendall 上崩溃。有人可以证实这一点吗?

最佳答案

我用高延迟/低带宽接口(interface)做了一些测试,得到了预期的错误。

这导致(如预期的那样)出现以下错误:

AssertionError: This event is already used by another greenlet: (<Greenlet 
at 0x7f3e758722d0: <bound method socket.sendall of <socket at 0x7f3e7587719
0 fileno=8 sock=127.0.0.1:1234 peer=127.0.0.1:51042>>('11111111111111111111
11111111111111111111111111111)>, timeout('timed out',))

这是带有 gevent.coros.RLock 的固定测试脚本,它不会产生此错误:https://gist.github.com/4249827/7f02f805331eda4091ae0b39dfea4b102cdba2fa

关于python - gevent,套接字和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13759576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com