问题描述
我是python的初学者,一直遇到问题。我希望根据我的代码需要在禁用ipv6的环境中运行的期望,尝试创建仅v4的grpc服务器套接字。
我的问题是,以下代码默认情况下不会在地址0.0.0.0上创建v4套接字。
首先, 这是带有输出的测试文件。 Python版本2.7.5。
s = df['NUMBER_OF_WORDS'].ne(1).cumsum()
out = df.groupby(s).agg({'SECTION':'first','TEXT':','.join,'NUMBER_OF_WORDS':'sum'})
我在Centos 7上看到端口50053的“ netstat -antop”输出是:
from gevent import monkey
monkey.patch_all()
from concurrent import patches
import grpc.experimental.gevent
grpc.experimental.gevent.init_gevent()
def main():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
server.add_insecure_port('0.0.0.0:50053')
server.start()
var = 1
while var == 1 :
pass
if __name__ == "__main__":
import sys
del sys.argv[1:]
sys.exit(main())
我想要这个:
tcp6 0 0 :::50053 :::* LISTEN 745/python off (0.00/0/0)
替换
tcp 0 0 0.0.0.0:50053 0.0.0.0:* LISTEN 1/python off (0.00/0/0)
作者
import grpc.experimental.gevent
grpc.experimental.gevent.init_gevent()
使这项工作有效。
你能帮我理解吗?
谢谢。
解决方法
这让我有些惊讶,因为在实现中,我们显式检查套接字家族并创建相应的套接字类型:https://github.com/grpc/grpc/blob/master/src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi#L77
快速search之后,这似乎是一个名为双栈的Linux功能。它可以帮助应用程序同时绑定到ipv4和ipv6。如果您不想要它,那么有很多关于如何禁用此功能的文档。