如何在线程间进行事件通知python

#如何在线程间进行事件通知
#实现一个打包线程,将转换出的xml文件压缩打包,比如转换线程每生产出100个xml文件,
# 就通知打包线程将他们打包成一个xxx.tgz文件,并删除xml文件,打包完成后,
# 打包线程反过来通知转换线程,转换线程继续转换。
import tarfile
import os

def tarXML(tfname):
   tf=tarfile.open(tfname,'w:gz')
   for fname in os.listdir('.'):
        if  fname.endswith('.xml'):
            tf.add(fname)
            os.remove(fname)
   tf.close()
   if not tf.members:
       os.remove(tfname)
tarXML('test.tgz')

import tarfile
import os

class TarThread(Thread):
    def __init__(self,cEvent,tEvent):
        Thread.__init__(self)
        self.count=0
        self.cEvent=cEvent
        self.tEvent = tEvent
    def tarXML(self,tfname):
       self.count +=1
       tfname='%d.tgz' % self.count
       tf=tarfile.open(tfname,'w:gz')
       for fname in os.listdir('.'):
            if  fname.endswith('.xml'):
                tf.add(fname)
                os.remove(fname)
       tf.close()
       if not tf.members:
           os.remove(tfname)
    #线程间的事件通知,可以使用标准库中的Threading.Event:
    # 1.等待事件一端调用wait,等待事件
    # 2.通知事件一端调用set,通知事件
    """
    from threading import Event,Thread
    def f(e):
       print 'f 0'
       e.wait()
       print'f 1'
    e=Event()
    t=Thread(target=f,args=(e,))
    t.start()
    """
    def run(self):
          while True:
            self.cEvent.wait()#等待对方转换完毕
            self.tarXML()
            self.cEvent.clear()#为了重复使用事件n
            self.tEvent.set()
tarXML('test.tgz')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雪snowflake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值