默写
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(进阶)通过队列和多进程实现生产者消费者模型
Python-day37作业-进程
猜你喜欢
转载自blog.csdn.net/msmso/article/details/108206219
今日推荐
周排行