先使用OSMNX下载数据后启动Dask出现DNS TypeError问题
问题:Ubuntu WSL下先执行OSMNX地理数据处理再初始化Dask Client触发TypeError
环境
- 运行环境:Ubuntu WSL + Visual Studio Code
- 涉及依赖:OSMNX、Dask
现象
- 报错场景:先通过OSMNX下载并处理地理数据,随后初始化
Dask.Client()时触发TypeError - 正常场景:先初始化
Dask.Client(),再执行OSMNX的地理数据处理操作,程序运行无异常 - 推测:本地文件下载操作可能干扰了Dask的网络配置逻辑
复现代码
study_area = study_area.geometry.unary_union osm_graph= ox.graph.graph_from_polygon(study_area, network_type='drive') osm_graph = ox.projection.project_graph(osm_graph, to_crs=local_crs) streets = ox.consolidate_intersections(osm_graph, rebuild_graph=True, tolerance=15, dead_ends=False) streets = ox.graph_to_gdfs( osm_graph, nodes=False, edges=True, node_geometry=False, fill_edge_geometry=True ) streets.head() client = Client()
错误栈信息
TypeError Traceback (most recent call last) File ~/miniconda3/lib/python3.10/site-packages/tornado/tcpclient.py:265, in TCPClient.connect(self, host, port, af, ssl_options, max_buffer_size, source_ip, source_port, timeout) 261 addrinfo = await gen.with_timeout( 262 timeout, self.resolver.resolve(host, port, af) 263 ) 264 else: --> 265 addrinfo = await self.resolver.resolve(host, port, af) 266 connector = _Connector( 267 addrinfo, 268 functools.partial( (...) 273 ), 274 ) 275 af, addr, stream = await connector.start(connect_timeout=timeout) File ~/miniconda3/lib/python3.10/site-packages/distributed/comm/tcp.py:476, in _DefaultLoopResolver.resolve(self, host, port, family) 466 async def resolve( 467 self, host: str, port: int, family: socket.AddressFamily = socket.AF_UNSPEC 468 ) -> list[tuple[int, Any]]: (...) 472 # matter (we discard the one we get back in the results), 473 # so the addresses we return should still be usable with SOCK_DGRAM. 474 return [ 475 (fam, address) --> 476 for fam, _, _, _, address in await _getaddrinfo( 477 host, port, family=family, type=socket.SOCK_STREAM 478 ) 479 ] File ~/miniconda3/lib/python3.10/site-packages/distributed/comm/tcp.py:436, in _getaddrinfo(host, port, family, type) 429 if sys.version_info >= (3, 9): 430 # If host and port are numeric, then getaddrinfo doesn't block and we 431 # can skip get_running_loop().getaddrinfo which is implemented by 432 # running in a ThreadPoolExecutor. So we try first with the 433 # _NUMERIC_ONLY flags set, and then only use the threadpool if that 434 # fails with EAI_NONAME: 435 try: --> 436 return socket.getaddrinfo( 437 host, 438 port, 439 family=family, 440 type=type, 441 flags=_NUMERIC_ONLY, 442 ) 443 except socket.gaierror as e: 444 if e.errno != socket.EAI_NONAME: TypeError: _config_dns.._getaddrinfo() got an unexpected keyword argument 'family'
临时解决方案
调整代码执行顺序,先初始化Dask.Client(),再执行OSMNX的地理数据下载与处理流程。
内容的提问来源于stack exchange,提问作者Reuben
相关产品推荐
相关产品推荐

