python开发一

python开发一

python的socket模块

语法

1.导入socket模块

import socket

2.创建套接字对象

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

AF_INET表示使用IPv4地址族
SOCK_STREAM表示使用TCP协议,如果需要使用UDP协议,则使用SOCK_DGRAM

3.绑定套接字到IP地址和端口号

sock.bind((host, port))

host是服务器的IP地址(字符串),可以使用空字符串绑定到所有可用的接口上
port是要绑定的端口号(整数)

4.开始监听连接请求

sock.listen(backlog)

backlog是等待连接队列的最大长度

5.接受客户端的连接请求并返回新的套接字和客户端地址信息

client_socket, client_address = sock.accept()

6.发送数据给远程主机

client_socket.send(data)

data是要发送的数据(字符串)

7.接收远程主机发来的数据

data = client_socket.recv(buffer_size)

buffer_size是每次从套接字接收的最大数据量

示例:

import socket

# 创建一个TCP/IP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到指定的地址和端口号
host = '127.0.0.1'
port = 12345
server_socket.bind((host, port))

# 开始监听连接请求
server_socket.listen(1)

print("服务器已启动,等待客户端连接...")

while True:
    # 接受一个新的连接请求
    client_socket, client_address = server_socket.accept()
    print("客户端已连接:", client_address)

    # 处理客户端请求
    data = client_socket.recv(1024)
    if data:
        print("接收到消息:", data.decode())
        client_socket.send("Hello, Client!".encode())

    # 关闭客户端连接
    client_socket.close()

获取IP

要获取Python中的IP地址,可以使用socket模块的gethostname()和gethostbyname()函数。

import socket

# 获取主机名
hostname = socket.gethostname()

# 根据主机名获取IP地址
ip_address = socket.gethostbyname(hostname)

print(f"主机名:{hostname}")
print(f"IP地址:{ip_address}")

python的whois模块

语法

1.安装whois模块

pip install python-whois

2.导入whois模块在这里插入代码片

import whois

3.查询域名的WHOIS信息

domain_info = whois.whois(domain)

domain是要查询的域名(字符串)

4.打印WHOIS信息

print(domain_info)

示例:

import whois

# 要查询的域名
domain = "example.com"

# 查询域名的WHOIS信息
domain_info = whois.whois(domain)

# 打印WHOIS信息
print(domain_info)

常用功能

1.获取原始的WHOIS文本:可以使用whois.whois(domain).text来获取原始的WHOIS文本信息,包括所有细节和字段。
2.检查域名是否可用:可以使用whois.query(domain).is_available来检查一个域名是否可用,返回一个布尔值。
3.获取WHOIS服务器:可以使用whois.whois(domain).whois_server来获取用于查询指定域名的WHOIS服务器。
4.获取联系人详细信息:可以使用whois.whois(domain).registrant、whois.whois(domain).admin和whois.whois(domain).tech来获取注册者、管理员和技术联系人的详细信息。
5.解析多个域名的WHOIS信息:可以使用whois.multi_whois(domains)来查询多个域名的WHOIS信息,并返回一个字典,其中键是域名,值是对应的WHOIS信息。
示例:

import whois

# 检查域名是否可用
domain = "example.com"
is_available = whois.query(domain).is_available
print(f"域名 {domain} 是否可用: {is_available}")

# 获取WHOIS服务器
whois_server = whois.whois(domain).whois_server
print(f"域名 {domain} 的WHOIS服务器: {whois_server}")

# 获取联系人详细信息
registrant_info = whois.whois(domain).registrant
print("注册者信息:")
print(registrant_info)

# 解析多个域名的WHOIS信息
domains = ["google.com", "facebook.com", "twitter.com"]
multi_whois = whois.multi_whois(domains)
for domain, info in multi_whois.items():
    print(f"\n域名: {domain}")
    print(info)

可获取的信息

1.域名的注册人(Registrant)
2.注册人的联系方式,如电子邮件、电话号码等
3.域名的注册商(Registrar)
4.域名的注册日期和到期日期
5.DNS服务器信息
6.域名的状态(是否已注册、是否可用等)

下面是一些常见的WHOIS对象属性:

  • domain_name:域名的名称
  • registrar:域名的注册商
  • whois_server:用于查询该域名的WHOIS服务器
  • referral_url:WHOIS查询的引用URL
  • registrant:域名的注册者
  • admin:域名的管理员联系信息
  • tech:域名的技术联系信息
  • name_servers:域名的DNS服务器列表
  • creation_date:域名的注册日期
  • expiration_date:域名的到期日期
  • status:域名的状态
    示例:
import whois

# 要查询的域名
domain = "example.com"

# 查询域名的WHOIS信息
domain_info = whois.whois(domain)

# 打印一些属性
print("域名名称:", domain_info.domain_name)
print("注册商:", domain_info.registrar)
print("注册日期:", domain_info.creation_date)
print("到期日期:", domain_info.expiration_date)
print("DNS服务器:", domain_info.name_servers)

python的sys模块

命令行参数:

sys.argv:表示一个包含命令行参数的列表。其中sys.argv[0]是脚本的名称,后续元素是传递给脚本的参数。

标准输入输出:

  • sys.stdin:表示标准输入流。
  • sys.stdout:表示标准输出流。
  • sys.stderr:表示标准错误流。

退出程序

  • sys.exit([status]):用于退出程序。可选的status参数指定退出状态码,默认为0。

运行时环境和系统相关信息:

  • sys.version:返回Python解释器的版本信息。
  • sys.platform:返回当前平台的标识符(如’win32’,'linux’等)。
  • sys.getsizeof(object):返回对象占用的内存大小(以字节为单位)。
  • sys.modules:是一个字典,包含已导入的模块。
    示例:
import sys

# 获取命令行参数
print("命令行参数:")
for arg in sys.argv:
    print(arg)

# 打印到标准输出
sys.stdout.write("这是标准输出\n")

# 打印到标准错误
sys.stderr.write("这是标准错误\n")

# 退出程序
sys.exit(1)

# 输出Python解释器版本信息
print("Python解释器版本:", sys.version)

# 输出当前平台标识符
print("当前平台:", sys.platform)

# 获取对象占用的内存大小
my_list = [1, 2, 3, 4, 5]
print("my_list占用的内存大小:", sys.getsizeof(my_list))

# 获取已导入的模块
print("已导入的模块:", list(sys.modules.keys()))

python的threading模块

Python的threading模块提供了一个高级别的多线程编程接口,用于在Python中进行并发编程。它允许你使用多个线程同时执行任务,从而实现并行处理和提高程序的性能。以下是threading模块的一些常见功能:

创建和管理线程:

  • Thread类:表示一个线程对象。可以通过继承Thread类或传递可调用对象来创建自定义的线程。
  • start()方法:启动线程,使其开始执行。
  • join([timeout])方法:等待线程执行完成。可选的timeout参数指定等待时间。
  • name属性:获取或设置线程的名称。

线程同步和互斥:

  • Lock类:提供基本的互斥锁功能,用于控制多个线程对共享资源的访问。
  • RLock类:可重入锁,允许同一个线程多次获取锁。
  • Condition类:提供条件变量,用于线程之间的通信和同步。
  • Semaphore类:实现信号量机制,用于控制对共享资源的访问权限。
    示例:
import threading
import time

# 自定义线程类
class MyThread(threading.Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name
    
    def run(self):
        print("线程", self.name, "开始执行")
        time.sleep(2)
        print("线程", self.name, "执行完成")

# 创建线程对象
thread1 = MyThread("Thread 1")
thread2 = MyThread("Thread 2")

# 启动线程
thread1.start()
thread2.start()

# 等待线程执行完成
thread1.join()
thread2.join()

print("所有线程执行完成")

常用功能

线程间通信:

  • Event类:提供了一个简单的线程事件对象,用于线程之间的通信和同步。
  • Condition类:除了互斥锁外,它还提供了线程等待和唤醒机制,用于复杂的线程间协调。
  • Queue类:提供线程安全的队列,用于在线程之间传递数据。

线程池:

  • ThreadPoolExecutor类:提供了一种方便的方式来管理和执行线程池中的任务,从而降低线程创建和销毁的开销。

线程优先级:

  • threading.Thread类的priority属性:用于获取或设置线程的优先级。不同平台的线程优先级支持度可能有所不同。

线程间同步:

  • Lock类、RLock类和Semaphore类:在处理共享资源时,可以使用这些同步原语来确保线程安全。
    示例:
import threading
import time

# 线程之间通信
def worker(event):
    print("Worker线程等待事件触发")
    event.wait()
    print("Worker线程收到事件")

def main():
    # 创建事件对象
    event = threading.Event()

    # 创建Worker线程并启动
    thread = threading.Thread(target=worker, args=(event,))
    thread.start()

    # 主线程延迟一段时间后触发事件
    time.sleep(2)
    print("主线程触发事件")
    event.set()

    # 等待Worker线程结束
    thread.join()


# 线程池
from concurrent.futures import ThreadPoolExecutor

def task(name):
    print(f"任务 {name} 开始执行")
    time.sleep(2)
    print(f"任务 {name} 执行完成")

def main_pool():
    # 创建线程池
    with ThreadPoolExecutor(max_workers=3) as executor:
        # 提交任务到线程池
        executor.submit(task, "Task 1")
        executor.submit(task, "Task 2")
        executor.submit(task, "Task 3")

        # 等待所有任务完成
        executor.shutdown(wait=True)

# 设置线程优先级
thread = threading.Thread(target=task)
thread.priority = 1

# 使用同步原语
lock = threading.Lock()
with lock:
    # 临界区代码
    pass


python的queue模块

常用

  • Queue: 这是最常用的队列类,实现了一个基本的先进先出(FIFO)队列。可以使用put()方法将元素添加到队列中,get()方法从队列中获取元素。

  • LifoQueue: 该类实现了一个后进先出(LIFO)队列,也称为堆栈。使用方式与Queue类相似。

  • PriorityQueue: 该类实现了一个优先级队列,每个元素会有一个与之关联的优先级。使用方式与Queue类相似,但是可以通过指定优先级来控制元素的顺序。
    除了上述几个类之外,queue 模块还提供了其他一些辅助函数,例如:

  • empty(): 判断队列是否为空。

  • full(): 判断队列是否已满。

  • qsize(): 返回队列中元素的数量。

  • put_nowait(item): 将元素添加到队列中,如果队列已满则立即引发 Queue.Full 异常。

  • get_nowait(): 从队列中获取元素,如果队列为空则立即引发 Queue.Empty 异常。

使用 Queue 类实现先进先出(FIFO)队列

import queue

q = queue.Queue()

# 添加元素到队列
q.put(10)
q.put(20)
q.put(30)

# 从队列中获取元素
print(q.get())  # 输出:10
print(q.get())  # 输出:20
print(q.get())  # 输出:30

使用 LifoQueue 类实现后进先出(LIFO)队列(堆栈)

import queue

stack = queue.LifoQueue()

# 添加元素到堆栈
stack.put(10)
stack.put(20)
stack.put(30)

# 从堆栈中获取元素
print(stack.get())  # 输出:30
print(stack.get())  # 输出:20
print(stack.get())  # 输出:10

使用 PriorityQueue 类实现优先级队列

import queue

pq = queue.PriorityQueue()

# 添加带有优先级的元素到队列
pq.put((3, "Apple"))
pq.put((1, "Banana"))
pq.put((2, "Orange"))

# 从队列中获取元素按优先级顺序返回
print(pq.get())  # 输出:(1, 'Banana')
print(pq.get())  # 输出:(2, 'Orange')
print(pq.get())  # 输出:(3, 'Apple')

python的time模块

  • time(): 返回从 1970 年 1 月 1 日开始累计的秒数,也称为 UNIX 时间戳。
  • ctime(): 返回当前时间的可读字符串表示。
  • gmtime([secs]): 将一个时间戳转换为格林威治天文时间(GMT)的结构化时间对象。
  • localtime([secs]): 将一个时间戳转换为本地时间的结构化时间对象。
  • asctime([tupletime]): 接受一个由 9 个元素组成的时间元组,并返回一个可读的字符串表示该时间。
  • strftime(format[, t]): 根据指定的格式化字符串,将时间转换为自定义的字符串表示。
  • sleep(secs): 在指定的秒数内暂停程序执行。
    示例:
    1.获取当前时间和日期
import time

current_time = time.time()
print("当前时间戳:", current_time)

current_local_time = time.ctime()
print("当前本地时间:", current_local_time)

current_gmt_time = time.gmtime()
print("当前格林威治时间:", current_gmt_time)

2.格式化时间

import time

current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("当前格式化时间:", current_time)

3.暂停程序执行

import time

print("开始...")
time.sleep(5)  # 暂停 5 秒
print("结束!")

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值