qq_33262765 2022-04-15 17:30 采纳率: 100%
浏览 93
已结题

python,怎么把数据传递给子线程中,计算完成后在主线程中显示

我想写一个程序,计算文件的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就读取不到了。

求指点!!

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题