揭开yield关键字的神秘面纱,Python压缩指定文件及

2019-10-16 22:44 来源:未知

Python压缩内定的文本及文件夹为.zip

写在前言

python多进度并发机制:

 

反复会映器重帘,python函数中带有yield关键字,那么yield是何许,有啥效果与利益?

这里运用了multprocessing.Pool进度池,来动态扩张进程

代码:

 

#coding=utf-8
from multiprocessing import Pool
import time
def ft(x):
  #多任务,系统自动化配进程执行
  for i in range(2):
    print i,'-----------',x
    time.sleep(1)



def main_process():
    pool = Pool(processes=4) #控制进程池的大小,为4个进程
    for i in range(10):
        #添加入进程池,apply带_async,单独apply为阻塞版本;函数名target,参数args
        result = pool.apply_async(ft,(i,))

    pool.close()
    pool.join()

    if result.successful():
        print('_____success_____')


if __name__=="__main__":
    main_process()
def zipDir(dirpath,outFullName):
    """
    压缩指定文件夹
    :param dirpath: 目标文件夹路径
    :param outFullName: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    zip = zipfile.ZipFile(outFullName,"w",zipfile.ZIP_DEFLATED)
    for path,dirnames,filenames in os.walk(dirpath):
        # 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
        fpath = path.replace(dirpath,'')

        for filename in filenames:
            zip.write(os.path.join(path,filename),os.path.join(fpath,filename))
    zip.close()

答案:能够精晓yield是叁个生成器;

运营结果:

 

效率:境遇yield关键字,函数会直接重临yield值,约等于return;差异的是下一次调用的时候会从yield之后的代码起始推行。

C:Python27python.exe D:/weixin/temp/testtmp.py
0 ----------- 0
0 ----------- 1
0 ----------- 2
0 ----------- 3
1 ----------- 0
1 ----------- 1
1 ----------- 2
1 ----------- 3
0 ----------- 4
0 ----------- 5
0 ----------- 6
0 ----------- 7
1 ----------- 4
1 ----------- 5
1 ----------- 6
1 ----------- 7
0 ----------- 8
0 ----------- 9
1 ----------- 8
1 ----------- 9
_____success_____

Process finished with exit code 0

 

从上述运维结果能够阅览,一遍最多试行了我们设定的4个经过。

生成器是怎么样?

 

是足以迭代的,不过你 只可以够读取它三遍 ,因为它并不把具备的值放在内部存储器中,它是实时地转移数据:

 

TAG标签:
版权声明:本文由澳门金莎娱乐网站发布于澳门金莎唯一指定官网,转载请注明出处:揭开yield关键字的神秘面纱,Python压缩指定文件及