大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!

接着上次的通过多进程来实现多任务处理,本次使用gevent来实现协程的多任务处理

闲话不说上代码:

#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""

@File : abc_test.py

@Author: JACK

@Date : 2019/8/12

@Des :

"""

"""

使用多任务,来copy文件到指定的目录下(协程版本)

"""

import os

# import multiprocessing

import time

import gevent

from gevent import monkey

import threading

old_folder_name = 'E:\\2jack项目\\2W_small_imgs'

new_folder_name = 'E:\\2jack项目\\2W_small_imgs_1'

tasklist = [] # 定义一个任务列表

count = []

file_names = os.listdir(old_folder_name)

# copy file

def copy_file_gevent(file_name):

old_file_path = os.path.join(old_folder_name, file_name)

# 把旧的东西读出来

file = open(old_file_path, 'rb')

content = file.read()

file.close()

# 创建一个新的文件

new_file_path = os.path.join(new_folder_name, file_name)

# 在新的里面写入

new_file = open(new_file_path, 'wb')

new_file.write(content)

new_file.close()

count.append(1)

# 创建目录

def mkdir_folder():

try:

os.mkdir(new_folder_name)

print("创建文件夹{}成功".format(new_folder_name))

except:

pass

# 执行单位

def main_gevent():

tasklist.append(gevent.spawn(count_progress))

for file in file_names:

tasklist.append(

gevent.spawn(copy_file_gevent, file)

)

gevent.joinall(tasklist)

def count_progress():

while True:

time.sleep(0.5)

if len(count) >= len(file_names):

break

else:

print("\r 当前执行进度{:2f}%".format((len(count)*100/len(file_names))), end="")

if __name__ == "__main__":

monkey.patch_all()

start_time = time.time()

mkdir_folder()

main_gevent()

end_time = time.time()

print("耗时{}".format((end_time-start_time)))

此处说个好玩的事情,在我用多线程来进行执行count_progress时,由于在while True中没有加time.sleep()操作,导致我启动的另外一个线程执行main_gevent一直得不到cpu的调度执行

count_thr = threading.Thread(target=count_progress)

print(1)

m_g = threading.Thread(target=main_gevent)

main_gevent()

print(2)

count_thr.start()

print(3)

m_g.start()

print(4)

打印输出截图

image.png

如上图会停留在2,而无法执行去start m_g这个线程

解决办法就是在count_progress里面增加sleep操作,顺利执行打印20000张图片后效率提升一倍(480s-222s)

image.png

python协程处理海量文件_python_实战篇_使用协程gevent模块实现多任务copyA文件夹到B文件夹...相关推荐

  1. Redis学习笔记②实战篇_黑马点评项目

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  2. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)...

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  3. 洗礼灵魂,修炼python(73)--全栈项目实战篇(1)——【转载】前提准备之学习ubuntu...

    本篇是为项目实战做准备,学习Linux是必备的,不然都不好意思叫全栈对吧?下面是一位资深大神写的文章,够详细,我也不用浪费时间再写了 原文链接:Ubuntu学习--第一篇 内容: 一. Ubuntu简 ...

  4. .classpath文件有什么用_干货分享:Windows目录结构剖析,C盘目录常见文件夹都有什么用?...

    我们天天和文件夹打交道,但是有好多的碍眼的文件夹我们能不能删除呢,来看看今天的文章. 先问一个问题,你对你电脑的文件系统了解多少? 很多人只管用,但是有些时候,想要自己清理一下文件的时候,不太敢删除, ...

  5. 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...

    一.项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务.可以记录想看.在看和看过的电影电视剧 .顺便打分.写影评.极大地方便了人们的生活. 今天小编以电视剧(美剧)为例,批量爬 ...

  6. Python快速上手系列--字典--详解实战篇

    本章字典篇,比较的重要,所以有比较多的练习小实战,一起来看看吧. 字典 什么是字典: 字典:是一系列的键值对,每一个键都会有对应的一个值关联,它们可以是数字 ,字符串,列表以及字典本身.用{}来表示. ...

  7. 三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)

    一.项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务.可以记录想看.在看和看过的电影电视剧 .顺便打分.写影评.极大地方便了人们的生活. 今天小编以电视剧(美剧)为例,批量爬 ...

  8. python程序调用函数的过程_Python_自定义函数_使用_运行流程

    定义函数会创建一个函数类的对象,有type函数. >>> type(print_new) 调用新函数的语法和调用内置函数是一样的,直接打印函数名: >>> prin ...

  9. python爬取微信小程序(实战篇)_爬虫爬取微信小程序

    之前打算做个微信小程序的社区,所以写了爬虫去爬取微信小程序,后面发现做微信小程序没有前途,就把原来的项目废弃了做了现在的网站观点,不过代码放着也是放着,还不如公开让大家用,所以我把代码贴出来,有需要的 ...

最新文章

  1. 5分钟实现SpringBoot整合Dubbo构建分布式服务
  2. drf中的各种view,viewset
  3. 天气预报c是什么意思_大雪节气将至,为什么老话说:寒风迎大雪,三九天气暖?...
  4. git 删除tag_Git 基本应用
  5. web默认字体最佳实践
  6. 【福利】MySQL vs Postgre SQL: 5个你最关注的非技术维度的区别
  7. tone mapping简介
  8. MySQL (1)---概述
  9. mysql版本号字段比较大小_MySQL查询 – 比较版本号
  10. latex安装教程以及入门
  11. python3文本文件读取方法_[Python3] 读取文本文件[TZZ]
  12. 最长公共子序列(LCS) 过程图解
  13. Matlab数学建模(八):评价型模型
  14. 计算机系统结构复习(六):Limits to ILP and SMT指令级并行的限制和同时多线程
  15. 树莓派最新raspbian系统换国内源
  16. Zabbix5.0版本 正则表达式
  17. [附源码]SSM计算机毕业设计高校教师教学助手系统的设计与实现JAVA
  18. 找回word文件的两种密码
  19. 联想笔记本f1到f12的功能
  20. windows进程管理器_面向Windows,Linux,Mac ,安卓, 木马,密码破解内存提取基于KPCR结构的技术研究...

热门文章

  1. 基于Nexys4 DDR的弹球游戏实现
  2. c语言程序设计考试改革,C语言程序设计课程考试改革实施方案.pdf
  3. python输入法引擎_Bigram-MLE语言模型和模拟输入法的python实现
  4. python散点图如何设置外边框_如何绘制散点图的外围边框?
  5. linux下oracle导出12705,llinux下Oracle数据库的单个表导出导入
  6. modelandview使用过程_深入源码分析SpringMVC执行过程
  7. react 动态修改路由_reactjs – 如何动态添加重定向到反应路由器?
  8. 2 Python 介绍
  9. win7重装系统后设置Python2.7环境
  10. Linux的追逐,Windows的穷途恼指日可待