Python基础知识-2

名片管理系统
def addHandler():
    print("添加名片")


def deleteHandler():
    IsDelete = input("(づ ̄3 ̄)づ╭❤~亲~您确定要删除名片吗?Yes/No").upper()
    if (IsDelete == 'YES'):
        print("删除名片")
    else:
        print("删除失败")


def editHandler():
    print("修改名片")


def queryHandler():
    print("查询名片")


def showHandler():
    print("展示名片")


def start():
    operate = int(input("请输入要操作的数字"))
    while True:
        print("------------------------------\n名片管理系统v1.0\n1:添加名片\n2:删除名片\n3:修改名片\n4:查询名片\n5.显示名片")
        if (operate == 1):
            addHandler()
            break
        elif (operate == 2):
            deleteHandler()
            break
        elif (operate == 3):
            editHandler()
            break
        elif (operate == 4):
            queryHandler()
            break
        else:
            showHandler()
            break


start()

Socket
UDP发送协议
import socket
# 1.创建socketd,并连接
# AF_INET:表示这个socket是用来进行网络连接
# SOCK_DGRAM:表示连接是一个UDP连接
socketDemo = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


# 发送数据
# data:表示要发送的数据,他是二进制数据
# address:发送给谁,参数是一个元祖,元祖里有两个元素
socketDemo.sendto("下午好".encode('utf8'), ('192.168.31.199', 9090))

UDP接收数据
data, address = socket.recvfrom(buffer_size)
#socket 是一个已经建立好的套接字对象,buffer_size 表示一次可以接收的最大数据量。当有数据到达时,recvfrom() 会将其存储到 data 变量中,并返回一个包含发送端地址信息的元组 address。如果没有数据可接收,recvfrom() 会阻塞等待,直到有数据到达为止。
import socket
socketRev = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

socketRev.bind(('192.168.31.11', 9090))
content = socketRev.recvfrom(1024)
print(content)

tcp
import socket

# 创建一个TCP socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定服务器地址和端口号
server_address = ('localhost', 8888)
server_socket.bind(server_address)

# 设置socket为被动模式,监听客户端连接请求
server_socket.listen(5)
print('Server is waiting for connection...')

# 接受客户端连接请求并处理数据
client_socket, client_address = server_socket.accept()
print(f'Connection from {client_address}')

tcp文件下载案例
客户端
import socket

# 基于tcp协议的socket连接
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 在发送数据前,建立和服务器的连接
tcpSocket.connect(('192.168.31.11', 9090))

tcpSocket.send('names.txt'.encode('utf8'))
txtContent = tcpSocket.recv(1024).decode('utf8')
print(txtContent)

服务端
import socket
import os
sever_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sever_socket.bind(('192.168.31.11', 9090))
sever_socket.listen(128)


# 接收客户端的请求
cliend_socket, client_addr = sever_socket.accept()
data = cliend_socket.recv(1024).decode('utf8')
print('接收到了来自{}地址端口{}的数据,内容是{}', data)

if os.path.isfile(data):
    with open(data, 'r', encoding='utf8') as file:
        content = file.read()
        cliend_socket.send((content.encode('utf8')))
else:
    print('文件不存在')

多线程 threading
import threading


def singgle():
    print("唱歌跳舞")


t1 = threading.Thread(target=singgle)
t1.start()

多线程生产案例
import time
import queue
import threading
q = queue.Queue()


def consumer():
    for i in range(10):
        time.sleep(1)
        print("买到了面包{}".format(q.get()))


def produce():
    for i in range(20):
        print("生产了面包")
        q.put("bread{}{}".format(threading.current_thread().name, i))



Prot1 = threading.Thread(target=produce, name='pr')

t2 = threading.Thread(target=consumer, name='com')
Prot1.start()

t2.start()

多进程
import multiprocessing
import time


def dance(m):
    for i in range(m):
        time.sleep(0.5)


def sing(m):
    for i in range(m):
        time.sleep(0.5)
        print("正在唱歌")


if __name__ == '__main__':
    p1 = multiprocessing.Process(target=dance, args=(10,))
    p2 = multiprocessing.Process(target=sing, args=(10,))

    p1.start()
    p2.start()

多进程间的通信

Python多进程间的通信可以通过以下几种方式实现:

  1. 队列(Queue):使用multiprocessing模块中的Queue类,该类提供了线程安全的队列实现,支持多个进程同时读写。一个进程向队列中放入数据,另一个进程从队列中取出数据。
  2. 管道(Pipe):使用multiprocessing模块中的Pipe类,该类提供了一个两端都能够发送和接收数据的管道,可以实现进程之间的双向通信。
  3. 共享内存(Shared Memory):使用multiprocessing模块中的Value和Array类,可以在多个进程之间共享一块内存区域,并对其进行读写操作。
  4. 进程池(Pool):使用multiprocessing模块中的Pool类,该类可以创建一组子进程,并把任务分配给它们,最后将所有子进程的结果合并起来。这种方式适用于需要在大量数据上执行相同操作的场景。

需要注意的是,由于多进程之间是独立的,它们之间的通信会带来一定的开销,因此在选择通信方式时需要根据具体情况进行权衡和选择。

wsgiref服务器
from wsgiref.simple_server import make_server

def demoApp(environ, start_response):
    status = '200 OK'
    path = environ['PATH_INFO']
    response = 'hello'
    print(path)
    if path == '/':
        response = '欢迎来到我的首页'
    elif path == '/test':
        response = '欢迎来到阿里test首页'
    else:
        response = '页面走丢了'
    headers = [('Content-Type', 'text/html;charset=utf8')]
    start_response(status, headers)
    return [response.encode('utf8')]


if __name__ == '__main__':
    httpd = make_server('', 8080, demoApp)
    sa = httpd.socket.getsockname()
    print("Serving HTTP on", sa[0], 'prot', sa[1])
    # import webbrowser
# 打开电脑的浏览器,并在电脑浏览器里输入地址
    # webbrowser.open("http://192.168.31.11:3000/")
    httpd.serve_forever()

安装Nginx
yum安装
sudo yum install nginx

cd /ect

vim nginx
服务监听
ps

作用:查看进程信息:

​ ps -aux

kill

作用:杀死进程

​ kill -9 PID

netstat

Mysql

show databases;

登录数据库
mysql -uroot -h 127.0.0.1 -p
创建数据库
create database xxx

charset=utf8;
切换表
use xxx
创建数据库表格内容
create table student(id int primary key auto_increment comment "用户的唯一表示",name varchar(128),age int)charset=utf8;
删除表格
drop table <tablename> 删除表格
移动表格
alter table <tablename> rename to <new Tablename>