• day39 Pyhton 并发编程02 后


    一.开启子进程的另一种方式

    import os
    from multiprocessing import Process
    class MyProcess(Process):
        def __init__(self,参数):
            super().__init__()
            self.一个属性 = 参数
    
        def run(self):
            print('子进程中要执行的代码')
    
    if __name__ == '__main__':
        conn = '一个链接'
        mp = MyProcess(conn)
        mp.start()

    锁的概念

    import json
    import time
    from multiprocessing import Process,Lock
    
    def search(name):
        '''查询余票的功能'''
        with open('ticket') as f:
            dic = json.load(f)
            print(name , dic['count'])
    
    def buy(name):
        with open('ticket') as f:
            dic = json.load(f)
        time.sleep(0.1)
        if dic['count'] > 0:
            print(name,'买到票了')
            dic['count'] -=1
        time.sleep(0.1)
        with open('ticket','w') as f:
            json.dump(dic,f)
    
    def get_ticket(name,lock):
        search(name)
        lock.acquire()  # 只有第一个到达的进程才能获取锁,剩下的其他人都需要在这里阻塞
        buy(name)
        lock.release()  # 有一个人还锁,会有一个人再结束阻塞拿到钥匙
    
    if __name__ == '__main__':
        dic={'count':1}
        with open('ticket', 'w') as f:
            json.dump(dic, f)
        lock = Lock()
        for i in range(10):
            p = Process(target=get_ticket,args=('name%s'%i,lock))
            p.start()

    多进程并发
    server
    import socket,time
    from multiprocessing import Process
    def talk(conn):
    
        while True:
            msg = conn.recv(1024).decode()
            conn.send(msg.upper().encode())
    
    if __name__ == '__main__':
        # 这句话下面的所有代码都只在主进程中执行
        sk = socket.socket()
        sk.bind(('127.0.0.1',9000))
        sk.listen()
        while True:
            conn,addr = sk.accept()
            Process(target=talk,args=(conn,)).start()
    
    # 卡 大量的while True 并且代码中并没有太多的其他操作
    # 如果我们使用socketserver,不会这么卡
    # 多进程确实可以帮助我们实现并发效果,但是还不够完美
    # 操作系统没开启一个进程要消耗大量的资源
    # 操作系统要负责调度进程 进程越多 调度起来就越吃力
    client
    import socket
    
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    
    
    while True:
        sk.send(b'hello')
        print(sk.recv(1024))
     
  • 相关阅读:
    ajax提交json数据到后端C#解析
    icheck判断是否选中
    sql多列值一行显示
    IDEA 2018 搭建 Spring MVC helloworld
    C# 注册DLL至GAC 并在添加引用中使用该DLL
    Java获取执行进程的dump文件及获取Java stack
    intellij idea搭建SpringBoot
    通过链接跳转登录到另外一个系统
    访问Hsql .data数据库文件
    基于weui的城市选择器(city-picker)
  • 原文地址:https://www.cnblogs.com/pythonz/p/10084217.html
Copyright © 2020-2023  润新知