当前位置:网站首页>IP地址查询
IP地址查询
2022-08-04 05:26:00 【Drizzlejj】
免费且不限请求次数的api接口,太平洋网络IP地址查询web接口(地址:http://whois.pconline.com.cn/)
import requests
import json
url = 'http://whois.pconline.com.cn/ipJson.jsp'
ip = '61.235.82.163'
param = {'ip':ip,
'json':'true'
}
ree = requests.get(url, params = param)
re = json.loads(ree.text.replace("\\"," "))
print(re)
输出结果:
{'ip': '61.235.82.163',
'pro': '广东省',
'proCode': '440000',
'city': '广州市',
'cityCode': '440100',
'region': '天河区',
'regionCode': '440106',
'addr': '广东省广州市天河区 蓝色心情网吧',
'regionNames': '',
'err': ''}
接口参数:
@param ip:可指定IP地址,不指定则取request.getRemoteAddr()的值。支持以下格式:(a)202.96.159.254 (b)202.096.159.254 (c)202.96.159.254/192.168.20.106 (适用于接口1-8)
@param rep:可指定活动页代码,输出的结果会按系统设置映射到相应的地区 (适用于接口1-8)
@param level:可指定输出结果的精度,=1/=2/=3分别代表只输出省名称/输出省市名称/输出省市区名称 (适用于接口1-9)
@param siteId:可指定网站或应用代码,输出IP所属的区域 (适用于接口2,5. siteId与rep原则上是互斥的)
@param callback:指定回调函数的名称, 不指定则默认为'IPCallBack' (适用于接口2,5)
@param domId:指定结点ID (适用于接口4, 必须指定)
@param id:指定结点ID (适用于接口6, 必须指定)
@param coords:指定坐标值,经度+","+纬度,经度纬度都是2个带小数点的数字。经度范围在73至135之间,纬度范围在3至53之间,即国内区域,不是中国的直接返回空 (适用于接口9-10, 必须指定)
@param json:可指定是否以json格式输出结果,不指定则默认为false。(适用于接口2,10)
参考网址:太平洋网络IP地址查询Web接口
多线程:
Python3 线程中常用的两个模块为:
thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。
_thread.start_new_thread ( function, args[, kwargs] )
'''
function - 线程函数。
args - 传递给线程函数的参数,他必须是个tuple类型。
kwargs - 可选参数。
'''
示例:
import _thread
import time
# 为线程定义一个函数
def print_time( threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print ("%s: %s" % ( threadName, time.ctime(time.time()) ))
# 创建两个线程
try:
_thread.start_new_thread( print_time, ("Thread-1", 2, ) )
_thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
print ("Error: 无法启动线程")
while 1:
pass
结果:
Thread-1: Wed Jan 5 17:38:08 2022 Thread-2: Wed Jan 5 17:38:10 2022 Thread-1: Wed Jan 5 17:38:10 2022 Thread-1: Wed Jan 5 17:38:12 2022 Thread-2: Wed Jan 5 17:38:14 2022 Thread-1: Wed Jan 5 17:38:14 2022 Thread-1: Wed Jan 5 17:38:16 2022 Thread-2: Wed Jan 5 17:38:18 2022 Thread-2: Wed Jan 5 17:38:22 2022 Thread-2: Wed Jan 5 17:38:26 2022
线程同步
如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。
使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire 方法和 release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire 和 release 方法之间。如下:
多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。
考虑这样一种情况:一个列表里所有元素都是0,线程"set"从后向前把所有元素改成1,而线程"print"负责从前往后读取列表并打印。
那么,可能线程"set"开始改的时候,线程"print"便来打印列表了,输出就成了一半0一半1,这就是数据的不同步。为了避免这种情况,引入了锁的概念。
锁有两种状态——锁定和未锁定。每当一个线程比如"set"要访问共享数据时,必须先获得锁定;如果已经有别的线程比如"print"获得锁定了,那么就让线程"set"暂停,也就是同步阻塞;等到线程"print"访问完毕,释放锁以后,再让线程"set"继续。
经过这样的处理,打印列表时要么全部输出0,要么全部输出1,不会再出现一半0一半1的尴尬场面。
import threading
import time
class myThread (threading.Thread):
def __init__(self, threadID, name, delay):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.delay = delay
def run(self):
print ("开启线程: " + self.name)
# 获取锁,用于线程同步
threadLock.acquire()
print_time(self.name, self.delay, 3)
# 释放锁,开启下一个线程
threadLock.release()
def print_time(threadName, delay, counter):
while counter:
time.sleep(delay)
print ("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1
threadLock = threading.Lock()
threads = []
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启新线程
thread1.start()
thread2.start()
# 添加线程到线程列表
threads.append(thread1)
threads.append(thread2)
# 等待所有线程完成
for t in threads:
t.join()
print ("退出主线程")
输出结果:
开启线程: Thread-1 开启线程: Thread-2 Thread-1: Wed Jan 5 17:36:50 2022 Thread-1: Wed Jan 5 17:36:51 2022 Thread-1: Wed Jan 5 17:36:52 2022 Thread-2: Wed Jan 5 17:36:54 2022 Thread-2: Wed Jan 5 17:36:56 2022 Thread-2: Wed Jan 5 17:36:58 2022 退出主线程
拆分文本文件:
def chai():
# 拆分 text
open_diff = open(r"C:\Users\Administrator\Desktop\133_ip.txt") # 源文本文件
diff_line = open_diff.readlines()
line_list = []
for line in diff_line:
line_list.append(line)
count = len(line_list) # 文件行数
print('源文件数据行数:', count)
# 切分diff
diff_match_split = [line_list[i:i + 5000] for i in range(0, len(line_list), 5000)] # 每个文件的数据行数
# 将切分的写入多个txt中
for i, j in zip(range(0, int(count / 5000 + 1)), range(0, int(count / 5000 + 1))): # 写入txt,计算需要写入的文件数
with open(r'C:\Users\Administrator\Desktop\ip%d.txt' % j, 'w+') as temp:
for line in diff_match_split[i]:
temp.write(line)
print('拆分后文件的个数:', i + 1)
边栏推荐
猜你喜欢
随机推荐
DP4398:国产兼容替代CS4398立体声24位/192kHz音频解码芯片
Can 't connect to MySQL server on' localhost3306 '(10061) simple solutions
Several ways to heavy
12. Paging plugin
MySQL日志篇,MySQL日志之binlog日志,binlog日志详解
OpenSSF 安全计划:SBOM 将驱动软件供应链安全
7.16 Day22---MYSQL (Dao mode encapsulates JDBC)
文献管理工具 | Zotero
基于C语言的学生信息管理系统_(更新版)_(附源码和安装包)_课程设计_**往事随風**的博客
webrtc中视频采集实现分析(一) 采集及图像处理接口封装
webrtc中的任务队列TaskQueue
《看见新力量》第四期免费下载!走进十五位科技创业者的精彩故事
Delphi-C端有趣的菜单操作界面设计
力扣:343. 整数拆分
8大软件供应链攻击事件概述
webrtc中的引用计框架
npm init [email protected] 构建项目报错SyntaxError: Unexpected token ‘.‘解决办法
MySQL日期函数
心余力绌:企业面临的软件供应链安全困境
EntityComponentSystemSamples学习笔记