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()

浙公网安备 33010602011771号