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()

 

posted @ 2018-12-23 21:19  Tangyun966  阅读(122)  评论(0)    收藏  举报