我应该如何使用我所有的cpu能力高效地在python中加载文件?
不久前,我决定创建一个python代码来加密我的数据,当我完成一半时,我决定做一个性能测试,结果非常糟糕,加密速度只有430kB/s。打开系统监视器显示我的程序只使用了8C16T处理器的一个线程 在我尝试临时删除代码中的加密部分后,速度只快了10kB/s。所以我分析了代码,找到了这部分代码我应该如何使用我所有的cpu能力高效地在python中加载文件?,python,python-2.7,python-multithreading,Python,Python 2.7,Python Multithreading,不久前,我决定创建一个python代码来加密我的数据,当我完成一半时,我决定做一个性能测试,结果非常糟糕,加密速度只有430kB/s。打开系统监视器显示我的程序只使用了8C16T处理器的一个线程 在我尝试临时删除代码中的加密部分后,速度只快了10kB/s。所以我分析了代码,找到了这部分代码 with open("10MB.test", 'rb') as f: byte = f.read(1) if(i == 0): test = (str("".join([c
with open("10MB.test", 'rb') as f:
byte = f.read(1)
if(i == 0):
test = (str("".join([ch.encode("hex") for line in byte for ch in line])))
i = 1
while byte != "":
g = g + 1
byte = f.read(1)
a = str("".join([ch.encode("hex") for line in byte for ch in line]))
test = test + a
运行非常慢,系统监视器显示它只使用我的cpu的一个线程。有没有一种方法可以利用我CPU的所有线程来加快运行速度
import time
from datetime import datetime
realsr = ""
test = ""
i = 0
m = 0
g = 2
j = 0
ti1 = 0
ti2 = 0
ea = raw_input("Please Input Your First Password: ")
print "You Entered:",ea
eb = raw_input("Please Input Your Second Password: ")
print "You Entered:",eb
ec = raw_input("Please Input Your Third Password: ")
print "You Entered:",ec
ed = raw_input("Please Input Your Forth Password: ")
print "You Entered:",ed
ee = raw_input("Please Input Your Fifth Password: ")
print "You Entered:",ee
ef = raw_input("Please Input Your Sixth Password: ")
print "You Entered:",ef
eg = raw_input("Please Input Your Seventh Password: ")
print "You Entered:",eg
eh = raw_input("Please Input Your Eighth Password: ")
print "You Entered:",eh
ti1 = int(round(time.time() * 1000))
with open("10MB.test", 'rb') as d:
j = len(str("".join([ch.encode("hex") for line in d for ch in line])))
with open("10MB.test", 'rb') as f:
byte = f.read(1)
if(i == 0):
test = (str("".join([ch.encode("hex") for line in byte for ch in line])))
i = 1
while byte != "":
g = g + 1
byte = f.read(1)
a = str("".join([ch.encode("hex") for line in byte for ch in line]))
test = test + a
if(j != len(test)):
temp1 = int(a,16)
if(m == 0):
temp1 * ea
if(m == 1):
temp1 * eb
if(m == 2):
temp1 * ec
if(m == 3):
temp1 * ed
if(m == 4):
temp1 * ee
if(m == 5):
temp1 * ef
if(m == 6):
temp1 * eg
if(m == 7):
temp1 * eh
while len(test) >= j:
with open("clone.test", 'wb') as k:
k.write(test.decode("hex"))
ti2 = int(round(time.time() * 1000))
print "done!"
print test
print (ti2-ti1)
print ti1
print (ti2)
break
您一次读取一个字节的文件:
f.read(1)
。这是一个可怕的想法。您应该尽可能安全地读取内存中的内容(如果内存大小允许,可能是整个文件),然后进行加密。如果需要访问所有CPU核心,则需要使用python
和来自文档的信息
在多处理中,通过创建进程对象生成进程
然后调用它的start()方法。该过程遵循
线程。线程。多进程程序的一个简单示例是
不要使用“byte=f.read(1)”从文件中加载1个字节,而是使用以下命令:
content = f.read()
for byte in content:
# your code
使用这种方法,您可以提高执行速度,因为您不会停止读取所有字节。您只能访问该文件一次。我最初打算逐字节加密该文件,但我认为我应该尝试加密整个文件。您仍然可以逐字节加密它。只是不要一个字节一个字节地读。这是真的,但是OP有一个i9处理器,我认为他将获得比多线程更快的多处理速度
content = f.read()
for byte in content:
# your code