每日作业 4/23

# 今日作业

整理今日内容到博客

描述知识点一定要用自己的话术概括,不要死记硬背!!!

把知识点理解了,再去用自己语言组织说出来即可

手动书写生产者消费者代码

from multiprocessing import Process,JoinableQueue
import time,random,os
def consumer(q):
    while True:
        res=q.get()
        time.sleep(random.randint(1,3))
        print('%s 吃 %s' %(os.getpid(),res))
        q.task_done()  

def producer(name,q):
    for i in range(1,4):
        time.sleep(random.randint(1,3))
        res='%s%s' %(name,i)
        q.put(res)
        print('%s 生产了 %s' %(os.getpid(),res))


if __name__ == '__main__':
    q=JoinableQueue()
    p1=Process(target=producer,args=("包子",q,))
    p2=Process(target=producer,args=("骨头",q,))

    c1=Process(target=consumer,args=(q,))
    c2=Process(target=consumer,args=(q,))

    #开始
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    c1.daemon=True   #设置守护进程
    c2.daemon=True
    c1.start()
    c2.start()

    q.join()
    print('')

"""
执行结果:
16120 生产了 包子1
6380 生产了 骨头1
16120 生产了 包子2
6380 生产了 骨头2
16120 生产了 包子3
6380 生产了 骨头3
9264 吃 包子1
1852 吃 骨头1
9264 吃 包子2
1852 吃 骨头2
9264 吃 包子3
1852 吃 骨头3
主
"""

思考:如何实现TCP服务端并发的效果

可以将通信循环放到函数中,通过Process创建进程

import socket
from multiprocessing import Process

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(("127.0.0.1",9000))
phone.listen(5)

def connect_server(conn,addr_port):
    while True:
        try:
            data=conn.recv(1024)
            if not data:break
            conn.send(data.upper())
        except Exception:
            break

if __name__ == '__main__':
    while True:
        conn,addr_port=phone.accept()
        p=Process(target=connect_server,args=(conn,addr_port,))
        p.start()