当前位置: 智能网> 人工智能> python修炼day32!

python修炼day32!

放大字体缩小字体发布日期:2019-05-28 21:17:13 浏览次数: 1095
核心提示:2019年05月28日关于python修炼day32!的最新消息:今日内容概述:多进程实现文件夹下载、迭代器、生成器、协程昨日回顾程序:一个静态的概念进程:一个动态的概念,就是程序运行起来的状态,用于一定的资源线程:运行在进程之内,依赖于进程,进


今日内容概述:

多进程实现文件夹下载、迭代器、生成器、协程

昨日回顾

程序:一个静态的概念

进程:一个动态的概念,就是程序运行起来的状态,用于一定的资源

线程:运行在进程之内,依赖于进程,

进程和线程区别:

共同点:都可以完成多任务区别: 线程: threading 依赖于进程 多线程之间共享全局的变量 主线程等待子线程结束,才结束 系统开销较小 进程: multiprocessing 运行起来的应用程序,占有一些资源 写时拷贝,进程不共享全局的资源 通过队列实现进程间通信 系统开销比较大

进程的创建:

multiprocessing.Process(target=函数名,args=(参数))继承方式创建进程class 子类名(multiprocessing.Proces): def run(self): pass

进程间通信(传递数据 ):

q = multiprocessing.Queue(3) # 创建一个队列,可以指定可传递几个数据q.put () # 存 q.get() # 取 q.qsize() # 取消息数量 q.full() # 判断是否满了q.empty # 判断是否为空

进程池:

一个特殊的容器,里面创建了很多进程,重复利用进程作用:减少了创建,销毁进程的过程,提高了效率po = multiprocessing.Pool(3) # 定义一个进程池,最大进程数2po.apply_async(要调用的目标,(要传递的参数)) # async 异步po.close() # 关闭进程池po.join() # 等待所有的子进程执行完毕

今日内容

文件夹复制:

os.listdir() # 列出文件夹中所有的文件名os.path.getsize() # 获取文件的大小os.mkdir() # 新建文件夹Pool() # 创建进程池Manger().Queue() # 有进程池的时候,队列需要 Manger()中的Queue() with open("文件名", “rw”) as f: f.read() # 读 f.write() # 写

文件夹复制代码

import multiprocessing

import os, time

def save_folder(q, dw_folder_name, save_folder_name, file_name):

with open(dw_folder_name + "/" + file_name, "rb") as f:

content = f.read()

# 在新创建的文件中写入文件

with open(save_folder_name + "/" + file_name, "wb") as f2:

f2.write(content)

new_file_size = os.path.getsize(save_folder_name + "/" + file_name)

q.put(new_file_size)

def main():

# 提示用户输入文件夹名

dw_folder_name = input("请输入要下载的文件夹的名字:")

try:
# 创建一个新文件夹
save_folder_name = dw_folder_name + "[嘿嘿嘿]"
os.mkdir(save_folder_name)

except:

pass

# 获取目标文件夹中的所有的文件 os.listdir()

file_names = os.listdir(dw_folder_name)

# 添加进程池

po = multiprocessing.Pool(3)

# 创建队列

q = multiprocessing.Manager().Queue()

# 从目标文件夹中读取文件

for file_name in file_names:
po.apply_async(save_folder, (q, dw_folder_name, save_folder_name, file_name))

po.close()

# po.join()

# 获取文件夹的大小

folder_size = 0

for old_file in file_names:

old_file_s = os.path.getsize(dw_folder_name + "/" + old_file)

folder_size += old_file_s

print("文件夹总大小为: %d" % folder_size)

new_file_size = 0

# 显示进度

while True:

s = q.get()
new_file_size += s
time.sleep(0.1)
print("拷贝的进度为: %.2f %%" % (new_file_size / folder_size * 100), end="")
if new_file_size >= folder_size:

break

print()

if __name__ == "__main__":

main()

进程池中的进程出现异常不会显示

首页 下一页 上一页 尾页

[ 智能网搜索] [ 打印本文] [ 违规举报]

猜你喜欢

推荐图文
ITECH直流电源在人工智能领域的应用 基于朴素贝叶斯自动过滤垃圾广告
2020年是人工智能相关业务发展的重要一年 我国人工智能市场规模、行业短板、发展前景一览
推荐智能网
点击排行
    
    | 锂电网| 智能网| 环保设备网| 联系方式
    Baidu
    map