发布于2019-11-07 22:57 阅读(1191) 评论(0) 点赞(19) 收藏(4)
我正在尝试将gevent所采用的概念包罗万象。这是gevent代码存储库中的示例。这是一个简单的回显服务器。
from gevent.server import StreamServer
# this handler will be run for each incoming connection in a dedicated greenlet
def echo(socket, address):
print ('New connection from %s:%s' % address)
socket.sendall('Welcome to the echo server! Type quit to exit.\r\n')
# using a makefile because we want to use readline()
fileobj = socket.makefile()
while True:
line = fileobj.readline()
if not line:
print ("client disconnected")
break
if line.strip().lower() == 'quit':
print ("client quit")
break
fileobj.write(line)
fileobj.flush()
print ("echoed %r" % line)
if __name__ == '__main__':
# to make the server use SSL, pass certfile and keyfile arguments to the constructor
server = StreamServer(('0.0.0.0', 6000), echo)
# to start the server asynchronously, use its start() method;
# we use blocking serve_forever() here because we have no other jobs
print ('Starting echo server on port 6000')
server.serve_forever()
这似乎很简单,我可以正常工作。但是,正如评论中所说,这serve_forever()
是一个阻止功能。如果我将最后一行更改server.start()
为该程序,则每行执行一次后将停止。我做错了事,但是文档不是很有帮助。
在使用gevent实现服务器的文档部分中,它说,使用start()
以下代码时,using 应该为每个新连接生成一个新的greenlet:
def handle(socket, address):
print 'new connection!'
server = StreamServer(('127.0.0.1', 1234), handle) # creates a new server
server.start() # start accepting new connections
然后紧接着它说The server_forever() method calls start() and then waits until interrupted or until the server is stopped.
我应该如何使用服务器运行,start()
以便它实际上保持活动状态以捕获第一个连接?
也:
start()
和之间有什么区别serve_forever()
?gevent.spawn()
和gevent.joinall()
使用第一种方法时,但不知何故,太明显了,他们已经离开了StreamServer的文档的出必要的吗?在gevent 1.0中,实际上最好使用gevent.wait()阻止它,直到没有更多活动的连接/ greenlet / listeners / watchers。
这是一个示例:https : //github.com/gevent/gevent/blob/master/examples/portforwarder.py
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/148759/735b9f7c132cc0e8109a/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!