Python 加快二进制文件打开速度
我在下面的代码中查找目录中的文件,并在转换为十六进制之前以二进制格式打开它们 现在它运行起来了,但我想让它更快,current需要4分钟来读取100k文件,但不需要多个处理器上的多线程,只是想知道有什么想法Python 加快二进制文件打开速度,python,python-3.x,binary,Python,Python 3.x,Binary,我在下面的代码中查找目录中的文件,并在转换为十六进制之前以二进制格式打开它们 现在它运行起来了,但我想让它更快,current需要4分钟来读取100k文件,但不需要多个处理器上的多线程,只是想知道有什么想法 def binary_file_reader(file_data): with open(file_data, 'rb') as binary_file_data: binary_file_data = binary_file_data.read()
def binary_file_reader(file_data):
with open(file_data, 'rb') as binary_file_data:
binary_file_data = binary_file_data.read()
binary_data = binascii.hexlify(binary_file_data)
binary_data = binary_data.decode("utf-8")
return binary_data
if __name__ == "__main__":
success_files_counted = 0
unsuccess_files_counted = 0
read_file_names = []
device_directory = os.getcwd()
for r, d, f in os.walk(device_directory):
for file in f:
try:
file_data = os.path.join(r, file)
binary_data = binary_file_reader(file_data)
read_file_names.append("Successful: "+r+file)
success_files_counted+=1
except IOError:
read_file_names.append("Unsuccessful: "+r+file)
unsuccess_files_counted+=1
Python模块允许类型并行处理
- 多线程(用于I/O绑定任务)
- 多进程(用于CPU限制的TAK)
- 非并行和多线程几乎同时进行
- 多进程版本大约快2倍
Processed main_unthreaded in 2.6610 sec
Successful 10000, Unsuccessfuil 0
Processed main_multithreaded in 3.2250 sec
Successful 10000, Unsuccessfuil 0
Processed main_multiprocessing in 1.2241 sec
Successful 10000, Unsuccessfuil 0
True
文件:main.py
输出
Processed main_unthreaded in 2.6610 sec
Successful 10000, Unsuccessfuil 0
Processed main_multithreaded in 3.2250 sec
Successful 10000, Unsuccessfuil 0
Processed main_multiprocessing in 1.2241 sec
Successful 10000, Unsuccessfuil 0
True
请你把代码的缩进改一下好吗?它将按原样引发sintax错误。(提示:粘贴到此处后,不要尝试手动缩进行:使用
{}
格式按钮或使用三个倒勾-\'\'\'来分隔代码块。)是的,这很奇怪。现在我想知道你对这个问题有什么看法。缩进是我最不关心的问题lol@RajB_007--要检查它是IO受限还是CPU受限,您可以注释掉二进制文件读取器中与`binary\u data=binascii.hexlify(二进制文件数据)binary\u data=binary\u data.decode(“utf-8”)`相对应的行,然后返回二进制文件数据。我在我的机器上尝试了一个多线程版本,所以想检查这是否有助于此测试(在我的机器上没有帮助,因为os.walk第一次很慢)。@RajB_007--添加了一个答案供尝试。在main.py中,您可以模拟数据或注释本节,以使用您的真实数据。@darryg噢,哇,太棒了。我很敬畏,非常感谢你,它工作得很好。我一定会仔细阅读的@很高兴我能帮上忙。您是否有机会使用您的实际数据?如果是这样,你的速度(如果有的话)是如何提高的?@DarryIG仍然把我的和你的结合在一起。一旦我完成测试工作,我将在2小时内发表评论。再次感谢你@亲爱的,我说过一次,再说一次,谢谢你。下面的结果和哇它的速度!起始文件夹:/Users在83.5037秒内处理了main_多线程,成功94241,未成功94259在51.2093秒内处理了main_多线程,成功94259,未成功5109在19.9108秒内处理了main_多线程,成功94259,未成功942595109@RajB_007--真是太好了。老实说,由于开销(即启动进程、在主进程和其他进程之间传输数据等),通常无法实现(即多进程实际上较慢)。
Processed main_unthreaded in 2.6610 sec
Successful 10000, Unsuccessfuil 0
Processed main_multithreaded in 3.2250 sec
Successful 10000, Unsuccessfuil 0
Processed main_multiprocessing in 1.2241 sec
Successful 10000, Unsuccessfuil 0
True