猿问

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

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


在我尝试临时删除代码中的加密部分后,它的速度仅为 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 的所有线程来使它运行得更快?


Smart猫小萌
浏览 228回答 3
3回答

宝慕林4294392

您一次读取一个字节的文件:f.read(1). 这是一个可怕的想法。您应该尽可能多地读取内存(如果内存大小允许,可能是整个文件),然后进行加密。

皈依舞

如果您需要访问所有 CPU 内核,则需要使用 Pythons Multiprocessing 模块。来自文档;在多处理中,通过创建一个 Process 对象然后调用它的 start() 方法来产生进程。进程遵循threading.Thread的API。多进程程序的一个简单例子是from multiprocessing import Processdef f(name):    print('hello', name)if __name__ == '__main__':    p = Process(target=f, args=('bob',))    p.start()    p.join()

缥缈止盈

不要使用“byte = f.read(1)”来从文件中加载 1 个字节,而是使用这个:content = f.read()for byte in content:    # your code使用这种方法,您可以在速度执行方面获胜,因为您不会停止在所有字节之间读取。您只能访问该文件一次。
随时随地看视频慕课网APP

相关分类

Python
我要回答