本文整理汇总了Python中ThreadPool.ThreadPool.insert方法的典型用法代码示例。如果您正苦于以下问题:Python ThreadPool.insert方法的具体用法?Python ThreadPool.insert怎么用?Python ThreadPool.insert使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ThreadPool.ThreadPool
的用法示例。
在下文中一共展示了ThreadPool.insert方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: DownloadServer
# 需要导入模块: from ThreadPool import ThreadPool [as 别名]
# 或者: from ThreadPool.ThreadPool import insert [as 别名]
#.........这里部分代码省略.........
db.Execute(sql)
elif RepeatType == REP_PER_MONTH:
# 如果是月任务,日期必须匹配
if today.day == date_nums[2]:
db.Execute(sql)
elif RepeatType == REP_PER_YEAR:
# 如果是年任务,月日必须匹配
if today.month == date_nums[1] and today.day == date_nums[2]:
db.Execute(sql)
elif RepeatType == REP_PER_ONCE:
# 对于仅执行一次的任务,年月日必须匹配
# 并且放入任务列表中后就暂停掉这项任务
if today.year == date_nums[0] and today.month == date_nums[1] and today.day == date_nums[2]:
db.Execute(sql)
db.Execute("UPDATE `UserTask` SET `Status` = 0 WHERE `TaskID` = %d" % TaskID)
self.prev_day = this_day
# 这个方法定时检查任务列表
# 将过期的任务从任务列表中删除
# 将未过期的任务添加到下载线程池
# 任务被重试的次数越多,则下载优先级越低
def update_worker(self, overwrite_time=None):
# TODO: 添加任务前先检查当前网络是否连通
# 首先选择所有任务列表中未暂停且未被下载中的任务
sql = "SELECT * FROM `CurrentTask` WHERE `Status` = 1 ORDER BY `RepeatTimes` ASC"
all_task = db.Query(sql)
# 对于每一项任务进行处理,加入缓冲区
for task in all_task:
# 利用任务的时区信息,实例化两个时间戳
# 并且计算当前时刻在目标时区是几点
TimeZone = timezone(task[7])
if overwrite_time is None:
Now = datetime.now(TimeZone)
else:
Now = overwrite_time
StartTime = TimeZone.localize(parser.parse(task[4]))
FinishTime = TimeZone.localize(parser.parse(task[5]))
TaskID = task[6]
if Now > FinishTime:
# 如果任务已经超时,直接删除
sql = "DELETE FROM `CurrentTask` WHERE `TaskID` = %d" % TaskID
db.Execute(sql)
elif Now < StartTime:
# 如果该任务尚未开始,就继续处理下一项任务
continue
else:
# 如果这项任务应该被执行,就将其放入缓冲区
sql = "SELECT `Downloader`, `CheckType`, `CheckSize` FROM `UserTask` WHERE `TaskID` = %d" % TaskID
task_data = db.QueryFirst(sql)
data = {
'TaskID': TaskID,
'URL': task[1],
# 注意这里的编码,需要传入unicode
'Location': task[3].decode('utf-8'),
'Downloader': task_data[0],
'CheckType': task_data[1],
'CheckSize': task_data[2]
}
self.thread_pool.insert(data)
# 简而言之,实现一个文件配额功能
# 由于用户文件分目录保存,因此就不用新建数据库结构了
def clean_worker(self):
sql = "SELECT `UID`, `MaxSize`, `MaxFiles` FROM `Users`"
all_users = db.Query(sql)
base_dir = cfg.read('global_pos')
for user in all_users:
UID = user[0]
MaxSize = user[1]
MaxFiles = user[2]
user_home_dir = os.path.join(base_dir, UID)
TotalSize, TotalFiles = get_dir_size(user_home_dir)
TotalSize /= (1024 * 1024)
# 如果超出了文件数量配额或者文件大小配额
if TotalSize > MaxSize or TotalFiles > MaxFiles:
# 首先暂停该用户所有任务
sql = "UPDATE `UserTask` SET `Status` = 0 WHERE `UID` = '%s'" % UID
db.Execute(sql)
# 其次删除所有正在进行的任务
sql = "DELETE FROM `CurrentTask` WHERE `UID` = '%s'" % UID
db.Execute(sql)
# “生产者”函数的守护线程
def worker_daemon(self):
sys.stderr.write('Worker daemon of Download Server started!\n')
while True:
sleep(int(cfg.read('worker_checking_interval')))
self.update_worker()
# 维护任务列表的方法的守护线程
def calendar_daemon(self):
sys.stderr.write('Calendar daemon of Download Server started!\n')
while True:
self.update_calendar()
sleep(int(cfg.read('date_checking_interval')))
def cleaner_daemon(self):
while True:
sleep(int(cfg.read('cleaner_checking_interval')))
self.clean_worker()