python36异步任务 获取ip地址的地理位置
# encoding: utf-8 import asyncio import requests import functools url = "http://ip.zxinc.org/api.php" params_list = [] # 存放所有要查询的参数 with open("IPv6.txt", 'r', encoding='utf-8') as f: for ip in f: ip = ip.strip() payload = {"type": "json", "ip": ip} params_list.append(payload) def save_result(res): # task回调函数 print(res) params, response = res.result() # 这就是get_ip_location函数的返回值,通过异步任务的result函数获取 if response.status_code == 500: with open("save_result22.txt", "a+", encoding="utf-8") as f1: f1.write(params["ip"] + " = 地址有误" + "\n") else: result = response.json() country = result["data"]["country"] with open("save_result22.txt", "a+", encoding="utf-8") as f1: f1.write(params["ip"] + " = " + country + "\n") async def get_ip_location(param): # 发送get请求 print("start ", param) # param = {"type": "json", "ip": "1.1.1.1"} param是requests.get的参数 loop = asyncio.get_event_loop() try: # 要使用await, 必须将第三方包转为awaitable对象 response = await loop.run_in_executor(None, functools.partial(requests.get, url=url, params=param)) return param, response except Exception as e: return param, e tasks = [] for param in params_list: task = asyncio.ensure_future(get_ip_location(param)) # 1.创建异步任务 task.add_done_callback(save_result) # 2.给任务添加回调函数 tasks.append(task) loop = asyncio.get_event_loop() # 3.创建事件循环 loop.run_until_complete(asyncio.wait(tasks)) # 4.执行所有异步任务
分类:
异步任务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性