当前位置: 首页>>代码示例>>Python>>正文


Python ThreadPool.insert方法代码示例

本文整理汇总了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()
开发者ID:FinalTheory,项目名称:PicDownloader,代码行数:104,代码来源:DownloadServer.py


注:本文中的ThreadPool.ThreadPool.insert方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。