Python-day37作业-进程

默写

1.主进程中创建两个其它进程,实现主进程结束,两个子进程也自动结束
from multiprocessing import Process, Lock, Queue
import time
import random
import json


def task(n):
    print(f'{n}紫荆城启动,正在执行')
    time.sleep(5)
    print(f'{n}子进程运行结束')


if __name__ == '__main__':
    t = Process(target=task, args=('一号',))
    t2 = Process(target=task, args=('二号',))
    t.daemon = True
    t.start()
    t2.start()
    time.sleep(1)
    print('主进程结束,一号给噎死')


2.通过互斥锁,实现模拟抢票

def search(i):
    with open(r'D:\Python成長之路\八月二十四\代码\ticket', 'r', encoding='utf-8') as f:
        dic = json.load(f)
        print(f'用户{i}票数为',dic.get('ticket_count'))


def buy(i):
    with open(r'D:\Python成長之路\八月二十四\代码\ticket', 'r', encoding='utf-8') as f:
        dic = json.load(f)
        ticket_count = dic.get('ticket_count')
    time.sleep(random.randint(1, 3))

    if dic.get('ticket_count') > 0:
        dic['ticket_count'] -= 1
        with open(r'D:\Python成長之路\八月二十四\代码\ticket', 'w', encoding='utf-8') as f:
            json.dump(dic, f)
            print(f'用户{i}抢到了')
            print(f'当前票数为{ticket_count}')
    else:
        print(f'用户{i}没抢到')


def task(mutex, i):
    search(i)
    # mutex.acquire()
    with mutex:
        buy(i)
    # mutex.release()


if __name__ == '__main__':
    mutex = Lock()
    for i in range(1, 11):
        t = Process(target=task, args=(mutex, i))
        t.start()


3 通过队列实现多个进程之间数据通信
def task1(q):
    print('进程一')
    print('发送消息')
    q.put('sailan')
    q.put('msmso')


def task2(q):
    print('进程二')
    print('收到消息', q.get())


def task3(q):
    print('进程三')
    print('收到消息', q.get())


if __name__ == '__main__':
    q = Queue(2)
    t1 = Process(target=task1, args=(q,))
    t2 = Process(target=task2, args=(q,))
    t3 = Process(target=task3, args=(q,))
    t1.start()
    t2.start()
    t3.start()


4 整理上下文管理器的使用,实现课上
代码
class MyClass:
    def __init__(self, file_name, mode, encoding):
        self.filename = file_name
        self.mode = mode
        self.encoding = encoding

    def __enter__(self):
        self.file = open(self.filename, self.mode, encoding=self.encoding)
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()


with MyClass(r'D:\Python成長之路\八月二十四\代码\ticket', 'r', encoding='utf-8') as f:
    print(f.read())

5 (进阶)通过多进程,实现TCP服务端支持多个客户端连接

from socket import *
from multiprocessing import Process

server=socket(AF_INET,SOCK_STREAM)
server.bind(('127.0.0.1',8080))
server.listen(5)

def talk(conn,client_addr):
    while True:
        try:
            msg=conn.recv(1024)
            if not msg:break
            conn.send(msg.upper())
        except Exception:
            break

if __name__ == '__main__': 
    while True:
        conn,client_addr=server.accept()
        p=Process(target=talk,args=(conn,client_addr))
        p.start()
6(进阶)通过队列和多进程实现生产者消费者模型

猜你喜欢

转载自blog.csdn.net/msmso/article/details/108206219