Python线程池:vthread

1. vthread

这个模块非常简洁方便, 只需要2句话

import vthread
@vthread.pool(10, join=True)

 

2. 案例

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
''' 
@Author: Victor
@Contact: _ycyj@163.com
@Date: 2020/10/14
@function: ''
'''

import time
import datetime
import threading
from threading import Thread
from loguru import logger
import vthread


class NewsToday(object):
    """
    请求 所有股票 最新新闻
    """

    def __init__(self):
        super(NewsToday, self).__init__()

        # 线程池数
        self.pool_num = 4

        # 根据进程数分组
        self.all_codes_group = []

    def _get_all_codes_group(self):
        """
        获取股票进行分组
        :return:
        """

        self.all_codes_group.clear()
        for i in range(self.pool_num):
            self.all_codes_group.append(self.all_codes[i::self.pool_num])
        logger.info("stock groups: {}".format(self.all_codes_group))
        return self.all_codes_group

    @vthread.pool(10, join=True)
    def exe_function(self, group_index, codes_arr):

        start = time.time()
        total_num = len(codes_arr)
        for code_index, code in enumerate(codes_arr):
            print(code_index, code)
        end = time.time()
        logger.info('{} 组, {} 个, 采集完成  用时:{}'.format(group_index, total_num, (end - start)))

        return True

    def start(self):
        """
        开启运行
        @return:
        """
        self.all_codes = [1, 2, 3, 4, 8, 9, 11, 21, 22]
        self.all_codes_group = self._get_all_codes_group()
        logger.info('开始采集')
        while True:
            try:
                for ind, codes_arr in enumerate(self.all_codes_group):
                    if codes_arr:
                        self.exe_function(ind, tuple(codes_arr))
                time.sleep(2)
            except Exception as ex:
                logger.error('exception: error{}'.format(ex))
                time.sleep(10)

        return True


if __name__ == '__main__':
    x = NewsToday()
    x.start()

  

 

 

 



posted @ 2020-10-14 18:47  Adamanter  阅读(592)  评论(0)    收藏  举报