15-解答作业和聊天室

lesson15解答作业和聊天室

 1 #视频1-一周的梳理
 2 #1,
 3 json--序列化和反序列化
 4 dumps   字符串转换
 5 loads
 6 dump    文件中转换
 7 load
 8 
 9 json.__all__
10 
11 #2,
12 hashlib-加密
13 加盐,md5,sha512
14 查看码-hexdigest,digest
15 对密码加密-pbkdf2_hmac
16 
17 #3,
18 base64转码,解码
19 普通编码解码--b64encode,b64decode
20 url编码解码--urlsafe_b664encode,rulsafe_b64decode
21 #4,
22 os-文件,路径
23 
24 
25 #5,python操作mysql
26 1,import pymysql
27 2,建立连接---pymysql.connect
28 3,定义游标
29 4,execute--执行sql语句的方法
30 5,fetchone--获取一条信息
31 6,fetchall--获取全部信息
32 7,插入数据默认会开启事务
33 8,commit
34 9,关闭游标
35 10,关闭连接
36 
37 #6,python操作redis
38 1,import redis
39 2,建立连接--redis.Redis
40 3,直接操作
41 
42 #7,mysql常用操作
43 1,创建用户,赋予权限,立即生效,用户,库,表,数据
44 2,mysql-uroot-pqwe123
45 3,表约束:非空,唯一,主键,外键,自增长,默认
46 4,表关系:一对一,一对多,多对多
47 5,查询:单表查询,子查询,关联查询,
48 6,内外连接:有无条件,左右
49 
50 #8,redis
51 1,字符串string
52 2,列表list
53 3,哈希hash
54 4,集合set
55 5,有序集合zset

----------------------------------------------------------
#视频2-作业讲解
#作业:
参照多线程的生产者和消费者模式,实现多进程的(manager)
//15作业生产消费多进程1.py:

 1 import multiprocessing as mp
 2 from multiprocessing import  Manager
 3 import random
 4 import queue
 5 import time
 6 
 7 #多进程--生产和消费模型
 8 #生产者-只关心队列是否已满。没满则生产,慢了就阻塞
 9 class Producer(mp.Process):
10     def __init__(self,QUE):
11         super().__init__()
12         self.q = QUE
13 
14     def run(self):
15         while True:
16             data = random.randint(0,99)  #生产一个数据
17             print('生产了:', data)
18             self.q.put(data)   #数据丢到队列中
19             time.sleep(1)
20 
21 
22 #消费者-只关心队列是否为空。不为空,则消费,为空则阻塞
23 class Concumer(mp.Process):
24     def __init__(self,QUE):
25         super().__init__()
26         self.q= QUE
27 
28     def run(self):
29         while True:
30             item =self.q.get()  #从队列中拿数据
31             print('消费者拿到:',item)
32 
33 mgr = Manager()
34 q =mgr.Queue(5)  #创建队列
35 
36 p = Producer(q)  #生产者
37 c =Concumer(q)   #消费者
38 
39 p.start()
40 c.start()
41 
42 p.join()  #等待子进程把任务做完,
43 c.join()

#运行:
生产了: 17
消费者拿到: 17
生产了: 76
消费者拿到: 76
生产了: 73
消费者拿到: 73
生产了: 87
消费者拿到: 87
生产了: 60
消费者拿到: 60
生产了: 92
消费者拿到: 92


----------------------------------------------------------
#视频3-聊天室
//聊天室--类似qq群聊,都能看到消息
//服务端:

 1 import multiprocessing as mp
 2 import socket
 3 
 4 server = socket.socket()
 5 server.bind(('0.0.0.0', 8882))
 6 server.listen(100)
 7 
 8 #发消息
 9 def send_data(data):
10     #print(data)
11     for addr, conn in list_prox.items():
12         conn.send(data.encode())
13 
14 #收消息, 构造消息
15 def recv_data(conn,addr):
16     while True:
17         try:
18             data = conn.recv(1024)
19             if data:
20                 data = '收到来自{}的消息:{}'.format(addr, data.decode())
21                 send_data(data)
22             else:
23                 raise Exception
24         except:
25             conn.close()
26             list_prox.pop(addr)  # 从用户字典中删除
27 
28             data_exit = '用户{}退出'.format(addr)
29             send_data(data_exit)
30             break
31 
32 mgr = mp.Manager()
33 list_prox = mgr.dict()    #用户信息字典  地址当做键, 对等套接字当做值
34 
35 
36 #处理用户的连接
37 while True:
38     conn,addr = server.accept()
39     list_prox.setdefault(addr, conn)
40     login = '用户{}登录'.format(addr)
41     #print(login)
42     send_data(login)
43 
44     mp.Process(target=recv_data, args=(conn, addr) ).start()

//客户端

 1 import socket
 2 import multiprocessing as mp
 3 
 4 client = socket.socket()
 5 client.connect(('127.0.0.1', 8888))
 6 
 7 
 8 def func():
 9     while True:
10         recv_data = client.recv(1024)
11         print('收到的消息:', recv_data.decode())
12 
13 
14 mp.Process(target=func).start()
15 while True:
16     data = input('')
17     client.send(data.encode())

#运行:
client1:
收到的消息: 用户('127.0.0.1', 47870)登录
收到的消息: 用户('127.0.0.1', 47872)登录
你好
你好
收到的消息: 收到来自('127.0.0.1', 47870)的消息:你好
收到的消息: 收到来自('127.0.0.1', 47872)的消息:都能收到吗?

client2:
收到的消息: 用户('127.0.0.1', 47872)登录
收到的消息: 收到来自('127.0.0.1', 47870)的消息:你好
都能收到吗?
都能收到吗?
收到的消息: 收到来自('127.0.0.1', 47872)的消息:都能收到吗?

猜你喜欢

转载自www.cnblogs.com/tiantiancode/p/12900410.html