python作业10
1.什么是面向对象的mro
方法查找的顺序
2.json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
dumps时指定ensure_ascii=False
3.简述 yield关键字。
生成器函数关键字
9.如何在一个function里面设置一个全局的变量?
使用global语句
10.python下多线程的限制以及多进程中传递参数的方式
用进程池Pool限制进程数,用管道Pipe或队列Queue实现参数传递
编程练习
1.创建一个文件,文件的第一行写入0,再创建20个任务线程,他们同时打开文件并将文件第一行读出来,加1写回去(将文件原有值覆盖掉)请保证20个任务线程完成后,文件中的第一行一定是20!
from threading import Thread, Lock lock = Lock() def addone(): lock.acquire() with open('text.txt', mode='r') as fd1: n = int(fd1.read()) n += 1 with open('text.txt', mode='w+') as fd2: fd2.write(str(n)) lock.release() if __name__ == '__main__': with open('text.txt', mode='w+') as fd: fd.write('0') tl =[] for i in range(20): thr = Thread(target=addone) tl.append(thr) for t in tl: t.start() for t in tl: t.join()
2.创建4个任务线程,他们同时判断输出100-300内的质数,输出不重复。
from threading import Thread def prime(n): for i in range(2,n-1): if n % i == 0: return False return True def worker(p): while True: try: n = next(p) except: break else: if prime(n): print(n) if __name__ == '__main__': g = (i for i in range(100,300)) tl = [] for i in range(4): thr = Thread(target=worker, args=(g,)) tl.append(thr) for t in tl: t.start() for t in tl: t.join()

浙公网安备 33010602011771号