<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Python_ID的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u010684603</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010684603]]></copyright><item><title><![CDATA[安装k8s]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/115262633</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/115262633</guid><author>u010684603</author><pubDate>Sun, 28 Mar 2021 08:22:43 +0800</pubDate><description><![CDATA[准备环境

设置主机名与时区

timedatectl set-timezone Asia/Shanghai
hostnamectl set-hostname master


配置hosts文件

	vim /etc/hosts


关闭防火墙

	sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
	setenforce 0
	systemctl disable firewalld
	systemctl stop fir]]></description><category></category></item><item><title><![CDATA[Dockerfile基础命令]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/114644144</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/114644144</guid><author>u010684603</author><pubDate>Mon, 22 Mar 2021 11:16:41 +0800</pubDate><description><![CDATA[Dockerfile基本命令
FROM - 基于基准镜像

FROM centos  # 基于centos:latest
FROM scratch  # 不依赖任何基准镜像base image
FROM tomcat:9.0.22-jdk8-openjdk

LABEL &amp; MAINTAINER - 说明信息

MAINTAINER  xxxx.com

机构&amp;个人ID


LABEL version=“1.0”
LABEL description=“这是描述信息”

WORKDIR - 设]]></description><category></category></item><item><title><![CDATA[容器间的通信&容器间数据共享]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/115038458</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/115038458</guid><author>u010684603</author><pubDate>Mon, 22 Mar 2021 11:15:18 +0800</pubDate><description><![CDATA[容器间的通信
单向通信
# 运行一个名字是web的tomcat容器 并且链接到database容器，可以进入容器内直接ping database，可以在容器能查看到配置到了/etc/hosts的文件
docker run -d --name web --link database tomcat

Bridge网桥双向通信

列出当前docker的网络服务明细

docker network ls


新建网桥

docker network create -d bridge my-bridge


将容器连]]></description><category></category></item><item><title><![CDATA[docker常用命令]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/114491475</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/114491475</guid><author>u010684603</author><pubDate>Wed, 10 Mar 2021 19:32:42 +0800</pubDate><description><![CDATA[配置镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json &lt;&lt;-'EOF'
{
	"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

docker常用命令
docker pull 镜像名 &lt;:tags&gt; - 从远程仓库抽取镜像
docker images -]]></description><category></category></item><item><title><![CDATA[centos7安装docker]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/114488979</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/114488979</guid><author>u010684603</author><pubDate>Sun, 07 Mar 2021 17:06:06 +0800</pubDate><description><![CDATA[centos7安装docker
安装基础包
yum install -y yum-utils device-mapper-persistent-data lvm2

配置docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

安装docker社区版
yum -y install docker-ce

启动docker
s]]></description><category></category></item><item><title><![CDATA[使用上下文管理器, 实现函数的计时, 魔法方法__enter__、__exit__的使用]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108894658</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108894658</guid><author>u010684603</author><pubDate>Thu, 01 Oct 2020 13:42:35 +0800</pubDate><description><![CDATA[# 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器

import time


def func(number):
    list1 = [1,2,4]
    # 递归结束条件
    if number &lt; 4:
        return list1[number-1]
    else:
        if number &gt; 3:
            # 递归调用函数
            return func(number]]></description><category></category></item><item><title><![CDATA[对象中使用索引操作, 魔法方法__getitem__、__setitem__、__delitem__的使用]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108893908</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108893908</guid><author>u010684603</author><pubDate>Thu, 01 Oct 2020 11:28:00 +0800</pubDate><description><![CDATA[代码
# 定义一个类字典对象(继承于dict类)，
# 创建一个类字典对象，键“a”的值为1，键“b”的值为2.
# 当访问键"a"的值得时候，屏幕打印100，
# 注意这里不是修改字典。
# 修改键“b”的值得时候，屏幕打印键“b”和修改后的值，
# 最后打印修改之后的字典。


class DiyDict(dict):
	"""定义一个类字典对象(继承于dict类)"""

    def __init__(self, dict_item, **kwargs):
        # super调用父类的]]></description><category></category></item><item><title><![CDATA[property属性的应用]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108602195</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108602195</guid><author>u010684603</author><pubDate>Tue, 15 Sep 2020 16:23:34 +0800</pubDate><description><![CDATA[代码
# 演示property属性的应用

class Person(object):
    def __init__(self, name):
        # 私有属性
        self.__name = name

    @property
    def name(self):
        # 返回私有属性
        return self.__name

    @name.setter
    def name(self, value):
        # 增加判断, ]]></description><category></category></item><item><title><![CDATA[yield实现多任务演示]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108423691</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108423691</guid><author>u010684603</author><pubDate>Sat, 05 Sep 2020 19:51:37 +0800</pubDate><description><![CDATA[代码
import time


def task1():
    """任务1函数"""
    i = 0
    while True:
        print("-----in task1-----")
        time.sleep(1)
        # 主程序中通过next()拿到yield后面的值
        # 生成器对象.send(“发送的数据”)，这时发送的数据传递到yield，当做yield的返回值
        result = yield i
        i]]></description><category></category></item><item><title><![CDATA[Python迭代器的应用]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108331597</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108331597</guid><author>u010684603</author><pubDate>Mon, 31 Aug 2020 23:20:59 +0800</pubDate><description><![CDATA[代码

class Fibonacci(object):
    def __init__(self, number):
        self.x = 0
        self.y = 1
        # 迭代器循环次数记录
        self.current_number = 0
        # 要计算的斐波那契数列的个数
        self.all_number = number

    def __iter__(self):
        """可迭代对象, 返回本身作]]></description><category></category></item><item><title><![CDATA[使用进程池和队列,完成文件夹拷贝案例]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108321311</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108321311</guid><author>u010684603</author><pubDate>Mon, 31 Aug 2020 15:02:36 +0800</pubDate><description><![CDATA[代码
# 使用进程池和队列,完成文件夹拷贝案例
# 在脚本同级目录下有个test文件夹, 里面只放了许多文本文件, 没有第二级目录


# 多进程
import multiprocessing
import os


def copy_file(file_name, source_folder, target_folder, queue):
    """
    完成拷贝任务
    :param file_name: 需要拷贝的文件名
    :param source_folder: 源文件夹
   ]]></description><category></category></item><item><title><![CDATA[在父进程中创建两个子进程，一个往Queue里写数据，一个从Queue里读数据]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108313423</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108313423</guid><author>u010684603</author><pubDate>Mon, 31 Aug 2020 00:06:53 +0800</pubDate><description><![CDATA[代码
# 在父进程中创建两个子进程，
# 一个往Queue里写数据，一个从Queue里读数据

import multiprocessing

# 创建一个队列, 里面最大存3个消息
queue = multiprocessing.Queue(3)


def write_queue(q):
    # 模拟数据
    data = [i for i in range(10)]
    # 循环往队列中存数据, 当存满时, 默认堵塞
    for msg in data:
        # 往队列中存]]></description><category></category></item><item><title><![CDATA[定义一个全局的列表，把这个列表，分别传到两个子进程中，其中一个子进程修改，之后打印，另外一个进程，不修改，仅仅打印]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108313316</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108313316</guid><author>u010684603</author><pubDate>Mon, 31 Aug 2020 00:02:23 +0800</pubDate><description><![CDATA[代码
# 编程实现：定义一个全局的列表，把这个列表，
# 分别传到两个子进程中，其中一个子进程修改，
# 之后打印，另外一个进程，不修改，仅仅打印

import multiprocessing


global_list = [100]


def modify_list(g_list):
    g_list.append(200)
    print("in modify_list function, global_list is {}".format(g_list))


def show_list]]></description><category></category></item><item><title><![CDATA[python查看帮助文档]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108308497</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108308497</guid><author>u010684603</author><pubDate>Sun, 30 Aug 2020 17:17:11 +0800</pubDate><description><![CDATA[1.先进入ipython3
2.导入需要的模块
3.help()查看需要帮助的类


]]></description><category></category></item><item><title><![CDATA[多线程代码练习题]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108292468</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108292468</guid><author>u010684603</author><pubDate>Sat, 29 Aug 2020 11:39:05 +0800</pubDate><description><![CDATA[代码
"""
1、
  使用多线程在终端中打印“hello,world” + 线程名字.

2、
  使用多线程实现：全局变量 g_num=0,使用一个线程，把g_num的值加10次1，
  然后主线程等待1秒，另外一个线程把g_num的值加10次1

3、
  使用互斥锁完成2个线程对同一个全局变量各加100万次的操作

4、
  编写多线程udp聊天器，子线程负责显示接收到的数据，主线程负责获取键盘的数据并发送
"""

import threading
import time


# 1.使用多线程在]]></description><category></category></item><item><title><![CDATA[Python检查IPv4地址是否符合规范]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108031286</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108031286</guid><author>u010684603</author><pubDate>Sun, 16 Aug 2020 01:42:18 +0800</pubDate><description><![CDATA[代码

def check_ip_address(ip_str):
    """
    检查IPv4的地址是否正确
    :param ip_str: ip地址,类型是字符串
    :return: 当ip正确时,返回字符串,当ip不正确时,返回None
    """
    # 判断参数是否为字符串
    if isinstance(ip_str, str):
        # 一共4组ip数字
        i = 4
        # 获取每一位ip 去除左右空格, 并且按"."分割]]></description><category></category></item><item><title><![CDATA[Python生成RSA密钥对 and 对象的序列化]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/108029793</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/108029793</guid><author>u010684603</author><pubDate>Sat, 15 Aug 2020 23:18:44 +0800</pubDate><description><![CDATA[流程
#mermaid-svg-TlPZvEFPcvMmyYZ1 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-TlPZvEFPcvMmyYZ1 .label text{fill:#333}#mermaid-svg-TlPZvEFPcvMmyYZ1 .node rect,#mermaid-svg-TlPZvEF]]></description><category></category></item><item><title><![CDATA[socket模拟TCP服务端]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/107946867</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/107946867</guid><author>u010684603</author><pubDate>Tue, 11 Aug 2020 23:16:57 +0800</pubDate><description><![CDATA[简述
使用socket模块, 大致模拟TCP服务端的以下流程:

创建TCP套接字( socket.socket(socket.AF_INET, socket.SOCK_STREAM) )
绑定端口(bind)
设置成监听状态(listen)
接受客户端的连接(accept)
接收(recv)/发送(send) 给客户端数据
关闭客户端的连接(close)
关闭服务端的socket

运行效果

代码
# TCP服务端

import socket


class TcpServer(object):
  ]]></description><category></category></item><item><title><![CDATA[TCP三次握手和四次挥手Wireshark抓包查看]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/107924594</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/107924594</guid><author>u010684603</author><pubDate>Mon, 10 Aug 2020 23:37:09 +0800</pubDate><description><![CDATA[TCP三次握手建立连接

服务端模拟

客户端模拟
# 创建TCP套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 客户端连接服务端
tcp_client_socket.connect(("192.168.241.1", 8080))

Wireshark过滤tcp端口
tcp.port == 8080


第一次握手
客户端向服务端发送 SYN信号

第二次握手
服务端发客户端发送 (SYN, ACK)信]]></description><category></category></item><item><title><![CDATA[python读取Windows注册表]]></title><link>https://blog.youkuaiyun.com/u010684603/article/details/107899680</link><guid>https://blog.youkuaiyun.com/u010684603/article/details/107899680</guid><author>u010684603</author><pubDate>Sun, 09 Aug 2020 20:42:30 +0800</pubDate><description><![CDATA[运行结果

代码
import winreg


def read_reg():
    location = r"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
    # 获取注册表该位置的所有键值
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, location)
    print("\n" + "-"*100 + "\n" + location + "]]></description><category></category></item></channel></rss>