Python多进程与单进程效率对比
运行环境:Python3 in win10
先生成200个测试文件
# generate.py
i = 0
while i < 200:
o = open("test\\" + str(i) + ".py", "w")
content = str(i)
o.write(content)
o.close()
i += 1
多进程拷贝文件
# multi-pool-copy.py
from multiprocessing import Pool, Manager
import time
import os
import shutil
import random
start = time.time()
def copyFile(file_name, old_folder_name, new_folder_name, q):
time.sleep(random.random())
shutil.copyfile(old_folder_name + '\\' + file_name, new_folder_name + '\\' + file_name,)
q.put(file_name) # put item into the queue
def main():
pool = Pool(5)
q = Manager().Queue()
old_folder_name = input("Please input the folder name you want to copy: ")
new_folder_name = old_folder_name + "-copy"
os.mkdir(new_folder_name)
file_name_list = os.listdir(old_folder_name)
for file in file_name_list:
pool.apply_async(copyFile, args=(file, old_folder_name, new_folder_name, q))
cnt = 0
allLength = len(file_name_list)
while cnt < allLength:
message = q.get()
cnt += 1
print("\rCopying %s, Process Bar is:%d%%" % (message, (cnt / allLength) * 100), end="")
print("Copy Done!")
if __name__ == "__main__":
main()
end = time.time()
print("Time-consuming: %#.2fs" % (end-start))
在使用单进程拷贝文件之前,需要手动删除test-copy文件夹
# single-pool-copy.py
import time
import os
import shutil
import random
start = time.time()
def copyFile(file_name, old_folder_name, new_folder_name):
time.sleep(random.random())
shutil.copyfile(old_folder_name + '\\' + file_name, new_folder_name + '\\' + file_name, )
def main():
old_folder_name = input("Please input the folder name you want to copy: ")
new_folder_name = old_folder_name + "-copy"
os.mkdir(new_folder_name)
file_name_list = os.listdir(old_folder_name)
cnt = 0
allLength = len(file_name_list)
for file in file_name_list:
copyFile(file, old_folder_name, new_folder_name)
cnt += 1
print("\rCopying %s, Process Bar is:%d%%" % (file, (cnt / allLength) * 100), end="")
print("Copy Done!")
if __name__ == "__main__":
main()
end = time.time()
print("Time-consuming: %#.2fs" % (end-start))
Python多进程与单进程效率对比的更多相关文章
- Python 多进程、多线程效率比较
Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...
- 约瑟夫环问题及python与c++实现效率对比
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...
- PHP多进程非阻塞模式下结合原生Mysql与单进程效率测试对比
公司在做游戏服务器合并的时候,对大批量数据表做了合并操作,难免会出现数据格式不一致问题.根据玩家反映BUG排查,是因为某个模块下日志表出现了数据格式问题导致. 目前想到的是有两种方案解决,第一种就是把 ...
- [python]关于字符串查找和re正则表达式的效率对比
最近需要在python中做大日志文件中做正则匹配 开始直接在for in 中每行做re.findall,后来发现,性能不行,就在re前面做一个基本的字符串包含判断 (str in str),如果不包含 ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- python 多进程开发与多线程开发
转自: http://tchuairen.blog.51cto.com/3848118/1720965 博文作者参考的博文: 博文1 博文2 我们先来了解什么是进程? 程序并不能单独运行,只有将程 ...
- python多进程与多线程编程
进程(process)和线程(thread)是非常抽象的概念.多线程与多进程编程对于代码的并发执行,提升代码运行效率和缩短运行时间至关重要.下面介绍一下python的multiprocess和thre ...
- Python多进程与多线程编程及GIL详解
介绍如何使用python的multiprocess和threading模块进行多线程和多进程编程. Python的多进程编程与multiprocess模块 python的多进程编程主要依靠multip ...
- Python多进程编程
转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...
随机推荐
- 自己手写一个SpringMVC 框架
一.了解SpringMVC运行流程及九大组件 1.SpringMVC 的运行流程 · 用户发送请求至前端控制器DispatcherServlet · DispatcherServlet收到请求调用 ...
- 【iOS开发】Alamofire框架的使用二 高级用法
Alamofire是在URLSession和URL加载系统的基础上写的.所以,为了更好地学习这个框架,建议先熟悉下列几个底层网络协议栈: URL Loading System Programming ...
- 列表、enumerate()函数,以及查看数据类型所有的内置方法
随便看看 """ forList(): 测试list和enumerate()函数 examineFun(): 查看数据类型所有的内置方法 ""&quo ...
- Centos7.5 部署postfix邮件系统
1. Postfix 1.1 邮件服务的介绍 电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务.通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费) ...
- 【Python 12】汇率兑换5.0(Lambda函数)
1.案例描述 设计一个汇率换算程序,其功能是将美元换算成人民币,或者相反. 2.0增加功能:根据输入判断是人民币还是美元,进行相应的转换计算 3.0增加功能:程序可以一直运行,知道用户选择退出 4. ...
- web Deploy发布问题
使用vs开发的时候,经常会发布项目.传统发布是登陆远程桌面.或ftp这些发布都有一定的麻烦.不能灵活的管理发布的文件.因此后来研究了web Deploy,研究之后发现是很不错的发布工具.这里把我使用w ...
- 为什么要使用TypeScript开发Web应用程序
TypeScript仍然相对较新,但已经赢得了很多信徒.继续阅读,看看这种很酷的语言的一些最好的功能. 定义TypeScript TypeScript是由Microsoft Corporation开发 ...
- Java中的CAS原理
前言:在对AQS框架进行分析的过程中发现了很多CAS操作,因此有必要对CAS进行一个梳理,也便更清楚的了解其原理. 1.CAS是什么 CAS,是compare and swap的缩写,中文含义:比较交 ...
- C. Maximal Intersection(STL)
这道题,关键在于怎么求多个区间的交集,使用multiset就可以 分别将 r , l 存在不同的mutiset中. 然后,我们来看一下 是不是 交集的 l 是最大的, 交集的 r 是最小的 #incl ...
- PHP命令执行与防范
命令执行漏洞是指攻击者可以随意执行系统命令,是高危漏洞之一. 命令连接符:& && || | 如:ping www.baidu.com && ne ...