我必须通过
同时执行多个函数调用gevent.spawn(recv)
因此,如果在一个recv(spawn)中,一个函数正在等待响应,则其他recv spawn线程启动但在执行第二个函数时阻塞它
def recv(*args, **kwargs):
while 1:
try:
return client_socket_fd.recv((args[0]))
except Exception, e:
err = e.args[0]
if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
sleep(1)
print 'No data available'
continue
else:
break
我们如何处理?
答案 0 :(得分:0)
sleep
,recv
等函数的gevent版。
为了调用正常的套接字/ IO /定时代码并使gevent正常工作,您需要 monkey_patch 此代码。这意味着调用gevent函数,用自己的版本替换内置的Python模块。通常,您想要运行
from gevent import monkey; monkey.patch_all()
代码的最开始。这避免了一些奇怪的错误,其中一些代码已经开始使用vanilla套接字或文件代码,然后在操作完成之前代码发生了变化。