zoukankan      html  css  js  c++  java
  • 每日作业 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()
  • 相关阅读:
    Go内建容器篇
    Go基础语法篇
    【区块链】比特币Merkle树
    【区块链】Fabric 术语
    Apache旗下项目
    【区块链】Fabric0.6 与1.0
    rc.local不起作用
    命令行模式启动VMWare虚拟机
    vsftpd 530 Login incorrect 根本原因和解决方案
    Oracle的undotbs01.dbf文件太大(占用大量磁盘空间)处理方法 ORA-01654 空间不足 ORA-01653
  • 原文地址:https://www.cnblogs.com/baicai37/p/12762947.html
Copyright © 2011-2022 走看看