高并发下的TCP服务端

并发

一个时间段看起来是同时执行

并行

实际意义上的同时运行

同步

让其做某件事,等它做完再开始接下来工作

异步

让其做某件事,它做它的,我们去忙自己的

阻塞

让其做某件事,什么都不做,等它做事的过程中 状态 叫做阻塞

非阻塞

让其做某件事,等它做事的过程中,在反复确认工作是否完成的状态

同步阻塞

让其做某件事,也不询问,等它做完,再开始接下来工作

异步非阻塞

让其做某件事,做事的过程中,我们去忙自己的,期间反复去询问有没有完成

开启进程

from multiprocessing import Process

import time
def write():
    time.sleep(1)
    with open('aa', 'a') as f:
        f.write('wuc 18\n')

windows中要想开启进程,必须放在main里进行
if __name__ == '__main__':
    1.开启进程先实例化,得到进程对象
    targrt=>你要执行的任务,,函数
    p = Process(target=write)
    2.必须调用start方法
    p.start()
    
    p1 = Process(target=write)
    p1.start()

Process参数

from multiprocessing import Process

import time
def write(name,age):
    print(name)
    print(age)
    # print(name)
    # time.sleep(1)
    # with open('aa', 'a') as f:
    #     f.write('wuc 18\n')


if __name__ == '__main__':
    p = Process(target=write, name='wuc_1',args=('wuc',18),kwargs={'name':'wuc','age':19})

    p.start()
    # print(p.name)
    
    name=***可以修改进程名
    args=***,按照位置进行传参,
    kwargs=***,按照字典进行传参

Process类的方法

p.run() 调用run方法,不会启动子进程,,第二种开启进程的方式,需要用到run方法, 重写run方法

p.join() 等待子进程执行完毕,在执行主进程

print(p.is_alive()) 打印出判断是否进程还存活  True
p.terminate()       终止进程
time.sleep(1)       让计算机有执行的时间
print(p.is_alive())  False  被“杀死”

Process类的属性

p.pid    pid号
p.name   进程名
p.daemon  设置守护进程,主进程结束,子进程结束,,**必须放在start前面

获取进程的id号

import os


def write():
   
    print('write_子进程id号:%s' % os.getpid())
    print('write_父进程id号:%s' % os.getppid())


if __name__ == '__main__':
    p = Process(target=write, args=('wuc',))

    p.start()
    print(p.pid)     #   write_子进程id号 与之相等
    print('main_主进程id号:%s' % os.getpid())   #  write_父进程id号 与之相等
    print('main_父进程id号:%s' % os.getppid())  # pycharm软件的id号
    
    

同时运行多个进程

def write(i, ):
    print('第%s个进程'% i)
    time.sleep(1)
    


if __name__ == '__main__':
    ll = []
    for i in range(5):
        p = Process(target=write, args=(i,))
        p.start()
        ll.append(p)
        
    for j in ll:
        j.join()

高并发下的TCP服务端

                             ***可实现多个客户端同时请求服务端***
def task(sock):
    while True:
        try:
            date = sock.recv(1024)
            if len(date) == 0:
                break
            print(date)
            sock.send(date.upper())
        except Exception as e:
            print(e)
            break
    sock.close()


if __name__ == '__main__':
    server = socket.socket()
    server.bind(('127.0.0.1', 8081))
    server.listen(5)
    print('正在接收客户端信息:')
    while True:
        sock, addr = server.accept()
        print(sock)
        print(addr)
        p = Process(target=task, args=(sock,))
        p.start()

    server.close()

进程锁

from multiprocessing import Process, Lock
import os
import time

def task(i, lock):
    lock.acquire()
    time.sleep(2)
    print('第%s个进程id:%s开始执行了' % (i, os.getpid()))
    print('第%s个进程id:%s结束执行了' % (i, os.getpid()))

    lock.release()


if __name__ == '__main__':
    lock = Lock()
    for i in range(5):
        p = Process(target=task, args=(i, lock))
        p.start()
posted @ 2021-07-31 13:07  wuc123  阅读(193)  评论(0)    收藏  举报