我应该如何使用我所有的cpu能力高效地在python中加载文件?

我应该如何使用我所有的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

不久前,我决定创建一个python代码来加密我的数据,当我完成一半时,我决定做一个性能测试,结果非常糟糕,加密速度只有430kB/s。打开系统监视器显示我的程序只使用了8C16T处理器的一个线程

在我尝试临时删除代码中的加密部分后,速度只快了10kB/s。所以我分析了代码,找到了这部分代码

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