python 超时跳出(子线程)&& 获取域内所有的主机名(十几秒快速获取)
简单的介绍
使用线程的方式调用函数,函数在一定时间内没有响应,则跳出该函数,继续往下运行!!!
下面代码的效果
快速获取局域网域内的所有存在的主机名!!!
响应速度很快,一般在十多秒内返回!!!
读者使用需要根据网段更改IP地址
import time
import threading
import sys,socket
def callback_func():
pass
#print('超时回调')
def time_out(interval, callback=None):
def decorator(func):
def wrapper(*args, **kwargs):
t =threading.Thread(target=func, args=args, kwargs=kwargs)
# 设置主线程技术子线程立刻结束
t.setDaemon(True)
t.start()
# 主线程阻塞等待interval秒,又名:挂起
t.join(interval)
if t.is_alive() and callback:
# 立即执行回调函数
return threading.Timer(0, callback).start()
else:
return
return wrapper
return decorator
@time_out(0.1, callback_func)
def hostname(ip):
try:
result=socket.gethostbyaddr(ip)
#print(result[0])
y=str(result[0])
names.append(y)
return y
except:
return 0
if __name__ == '__main__':
names=[]
for i in range(60,255):
ip='10.102.10.'+str(i)
hostname(ip)
print(names)
这个方法一个缺点:获取不到跳出函数的返回值
看完的读者给一个奖励:提供另一个超时跳出的文章
------> 点击跳转(带返回值的超时跳出)
·
·
·
简单的一个分享
·
·
·
作者说明:写文档,就用心写到最好,供大家阅读!!!