python进阶_Day6
思维导图:
作业:
作业一:
# (1)请使用多任务形式完成:一边编程、一边听音乐、一边跟同事聊天。要求如下:
# a.使用多进程完成;
# (1)请使用多任务形式完成:一边编程、一边听音乐、一边跟同事聊天。要求如下:
import multiprocessing
def code(num):for i in range(num):print(f'第{i+1}次,code')def music(num):for i in range(num):print(f'第{i+1}次,music')def chat(num):for i in range(num):print(f'第{i+1}次,chat')# a.使用多进程完成;
if __name__ == '__main__':p1 = multiprocessing.Process(target=code, args=(3, ))p2 = multiprocessing.Process(target=music, args=(3, ))p3 = multiprocessing.Process(target=chat, args=(3, ))p1.start()p2.start()p3.start()p1.join()p2.join()p3.join()print('执行完毕')
运行结果:
作业二:
# b.使用多线程完成;
import threading
def code(num):for i in range(num):print(f'第{i+1}次,code')def music(num):for i in range(num):print(f'第{i+1}次,music')def chat(num):for i in range(num):print(f'第{i+1}次,chat')#
# b.使用多线程完成;
if __name__ == '__main__':t1 = threading.Thread(target=code, args=(3, ))t2 = threading.Thread(target=music, args=(3, ))t3 = threading.Thread(target=chat, args=(3, ))t1.start()t2.start()t3.start()t1.join()t2.join()t3.join()print('执行完毕')
运行结果:
作业三:
编写一个线程死锁的案例:
原因:未释放锁
import threadingmutex = threading.Lock()
def code(num):mutex.acquire()for i in range(num):print(f'第{i+1}次,code')# mutex.release()
def music(num):mutex.acquire()for i in range(num):print(f'第{i+1}次,music')# mutex.release()
if __name__ == '__main__':t1 = threading.Thread(target=code, args=(5,))t2 = threading.Thread(target=music, args=(5,))t1.start()t2.start()t1.join()t2.join()print('执行完毕')
运行结果:
作业四:
(1)写一个文件操作的上下文管理器,并用with语句测试通过
# a.要求增加一个read_data函数,读文件操作,只读前10行;
class Myfile():def __init__(self, name,mode):self.name = nameself.mode = modeself.fp = Nonedef __enter__(self):self.fp = open(self.name, self.mode, encoding='utf-8')return selfdef read_data(self):content = []for i in range(10):txt = self.fp.readline()content.append(txt)return contentdef __exit__(self, exc_type, exc_val, exc_tb):self.fp.close()if __name__ == '__main__':with Myfile('jaychou_lyrics.txt','r') as file:content = file.read_data()for line in content:print(line,end='')
运行结果:
作业五:
编写一个数据迭代器,要求每次读8条数据
import math# 编写一个数据迭代器,要求每次读8条数据
def read_data(batch_size):with open('jaychou_lyrics.txt', 'r', encoding='utf-8') as file:file_data = file.readlines()batch_number = math.ceil(len(file_data) / batch_size)for i in range(batch_number):yield file_data[i * batch_size:(i + 1) * batch_size]if __name__ == '__main__':data = read_data(4)for i in data:print(i)
运行结果:
yield关键字的作用:
1 将yield后面的值返回
2 在yield这个地方卡着(阻塞)