我想写一个程序,计算文件的MD5和sha1,及crc32,并打印出来。
刚写了sha1和md5。发现读取只做了一次,但是计算却是单核计算,所以就想改成线程提高计算效率,
但是不知道如何把数据传入两个子线程,并且把计算结果取出来。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import hashlib
import datetime
import threading
from queue import Queue
class md5(threading.Thread):
def __init__(self):
threading.Thread.__init__(self, name="md5")
def run(self):
while True:
event.wait()
file_md5 = hashlib.md5(data).hexdigest()
event.clear()
class sha1(threading.Thread):
def __init__(self):
threading.Thread.__init__(self, name="sha1")
def run(self):
while True:
event.wait()
file_sha1 = hashlib.sha1(data).hexdigest()
event.clear()
if __name__ == '__main__':
event = threading.Event()
file_name = "f:\\1.rar"
start = datetime.datetime.now()
md5 = md5()
md5.start()
sha1 = sha1()
sha1.start()
with open(file_name, 'rb') as fp:
data = fp.read()
event.set()
end = datetime.datetime.now()
print("耗时合计 : ", end - start)
print("file_md5 =", file_md5)
print("file_sha1 =", file_sha1)
代码尚未运行过,有那么几个点不是很懂,百度了一圈,也没找到合适的方法。
1、主线程读取数据,怎么把主线程读取的数据传递给子线程。
2、两个子线程如果都处理完成之后,如何通知主线程继续读取。
3、所有数据读取并计算完成后,主线程如何从子线程读取结果,并显示。
我看到网上有人用队列传递数据,但是貌似不适合这个场景,假定md5 读取了,那么sha1就读取不到了。
求指点!!