为了账号安全,请及时绑定邮箱和手机立即绑定

ThreadPoolExeturor 的未来永远不会结束

ThreadPoolExeturor 的未来永远不会结束

哈士奇WWW 2023-07-11 15:39:55
我正在为一个程序编写一个后端,该程序需要能够 ping 网络上的所有设备以查看它们是否存在。该后端在 Flask 套接字上运行。我编写了一个简单的测试脚本,它使用 threadExecutor 和 futures 来加速该过程。import platformimport subprocessimport netifaces as niimport concurrent.futuresimport socketbaseIP = ni.ifaddresses('enp4s0')[ni.AF_INET][0]['addr']prefix = '.'.join(baseIP.split('.')[0:3])aliveIPs = []def ping(ip):    command = ['ping', '-c 1', '-w 5', ip]    print(ip)    if(subprocess.call(command) == 0):        return socket.gethostbyaddr(ip)    else:        return ''ips = [prefix + '.' +str(i) for i in range(0,255)]with concurrent.futures.ThreadPoolExecutor() as executor:    futures = []    for ip in ips:        futures.append(executor.submit(ping, ip=ip))    for future in concurrent.futures.as_completed(futures):        res = future.result()        if(res != ''):            aliveIPs.append(res)print(aliveIPs)这段代码在我的电脑上使用 python3 运行得很好,并为我提供了网络上的设备列表。但是当我在我的 Flask 应用程序中实现这段代码时,future 永远不会结束,导致它挂在它尝试扫描的第一个 ip 上。以下代码来自我的烧瓶应用程序。def ping(ip):    print(ip)    proc = subprocess.run(['ping', '-c 1', '-w 5', ip])    if(proc == 0):        print("alive")        return socket.gethostbyaddr(ip)    else:        print("none")        return ''"""gets a list of available hosts in the network for a connection"""def update_worker_list(executor):    print("updating")    network_device = get_network_info()['net_name']    ip = ni.ifaddresses(network_device)[ni.AF_INET][0]['addr']    ipPrefix = '.'.join(ip.split('.')[0:3])    alive_ips = []    ips = [ipPrefix + '.' + str(i) for i in range(0, 255)]    futures = []    for ip in ips:        futures.append(executor.submit(ping, ip=ip))    for future in concurrent.futures.as_completed(futures):        res = future.result()        if(res != ''):            alive_ips.append(res)    print(alive_ips)我正在寻找任何关于为什么未来无法解决的想法。
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

因此,在深入研究flask-socketIO的源代码后,我发现socketIO喜欢占用线程。这意味着您必须自己使用 gevent 或 eventlet 自行修补它以使用另一个。


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信