def scan_bangumi(self):
"""
dispatch the feed crawling job, this is a synchronized method running on individual thread
:return:
"""
logger.info('scan bangumi %s', self.__class__.__name__)
bangumi_list = yield threads.deferToThread(self.query_bangumi_list)
index_list = range(len(bangumi_list))
random.shuffle(index_list)
for index in index_list:
bangumi = bangumi_list[index]
if not self.check_bangumi_status(bangumi):
episode_list = yield threads.deferToThread(self.query_episode_list, bangumi.id)
# result is an array of tuple (item, eps_no)
scan_result = yield threads.deferToThread(self.scan_feed, bangumi, episode_list)
if scan_result is None:
continue
url_eps_list = [
(download_url, self.__find_episode_by_number(episode_list, eps_no), file_path, file_name)
for (download_url, eps_no, file_path, file_name) in scan_result
]
# this method may raise exception
yield threads.deferToThread(self.download_episodes, url_eps_list, bangumi.id)
yield threads.deferToThread(self.update_bangumi_status, bangumi)
评论列表
文章目录