#!/usr/bin/env python
# -*- coding: utf-8 -*-
import threading
import time
import queue as Queue
class _timerThread(threading.Thread):
def __init__(self, t_name,queue,cond,args):
threading.Thread.__init__(self, name=t_name)
self.threadtimes = []
self.threadFunc = {}
self.lasttimes = {}
self.queue = queue
self.args = args
def setNewTimer(self,newobj):
if newobj.func == None:
self.threadtimes.remove(newobj.secendtime)
self.threadFunc[str(newobj.secendtime)] = None
self.lasttimes[str(newobj.secendtime)] = None
else:
if newobj.secendtime in self.threadtimes:
self.threadFunc[str(newobj.secendtime)] = newobj.func
self.lasttimes[str(newobj.secendtime)] = int(time.time())
else:
self.threadtimes.append(newobj.secendtime)
self.threadFunc[str(newobj.secendtime)] = newobj.func
self.lasttimes[str(newobj.secendtime)] = int(time.time())
def run(self):
last_threadtimes_len = len(self.threadtimes)
while(True):
#print("begin run")
if not self.queue.empty():
objtmp = self.queue.get()
self.setNewTimer(objtmp)
timetmp = int(time.time())
for tx in self.threadtimes:
if last_threadtimes_len == 0 and len(self.threadtimes) > 0:
self.lasttimes[str(tx)] = timetmp
self.threadFunc[str(tx)](self.args)
last_threadtimes_len = len(self.threadtimes)
if timetmp - self.lasttimes[str(tx)] >= tx and last_threadtimes_len > 0:
self.lasttimes[str(tx)] = timetmp
self.threadFunc[str(tx)](self.args)
self.condition.release()
class _timerObj():
def __init__(self,secendt,funct):
self.secendtime = secendt
self.func = funct
class threadtimer():
def __init__(self,args):
self.queue = Queue.Queue()
self.cond = threading.Condition()
self.args = args
self.t_thread = _timerThread(str(int(time.time())),self.queue, self.cond,self.args)
self._timers = []
self._initTimer()
def _initTimer(self):
self.t_thread.setDaemon(True)
self.t_thread.start()
def getTimers(self):
return self._timers
def setTimer(self,secendTime,Func):
objtmp = _timerObj(secendTime,Func)
self._timers.append(secendTime)
self.queue.put(objtmp)
def removeTimer(self,secendTime):
objtmp = _timerObj(secendTime,None)
self._timers.remove(secendTime)
self.queue.put(objtmp)
没有合适的资源?快使用搜索试试~ 我知道了~
通过多线程实现定时器,定时启动多线程,并且带有参数,threadtimer为定时器,main为主程序,可以按照间隔启动多线程
资源推荐
资源详情
资源评论
收起资源包目录
threadtimer.rar (2个子文件)
threadtimer.py 3KB
main.py 622B
共 2 条
- 1
资源评论
reset2021
- 粉丝: 49
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功