|
执行脚本1:
class Logger(object):
level_relati** = {
'debug':logging.DEBUG,
'info':logging.INFO,
'warning':logging.WARNING,
'error':logging.ERROR,
'crit':logging.CRITICAL
}#日志级别关系映射
def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt)#设置日志格式
self.logger.setLevel(self.level_relati**.get(level))#设置日志级别
sh = logging.StreamHandler()#往屏幕上输出
sh.setFormatter(format_str) #设置屏幕上显示的格式
th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount)#往文件里写入#指定间隔时间自动生成文件的处理器
th.setFormatter(format_str)#设置文件里写入的格式
self.logger.addHandler(th)
def ClockProcess(db_pool,table_name,table_count,log):
log.logger.info(table_name)
sql_do = 'select count(*) from ' + table_name[0] + '.' + table_name[1]
log.logger.info(sql_do)
select_res = db_pool.select(sql_do)
log.logger.info(select_res)
if select_res[0][0] == 0:
return 0
log.logger.info(select_res)
table_count.append(table_name[0] + '.' + table_name[1] + ':' + str(select_res[0][0]))
log.logger.info(table_count)
def getNeedCheckTable(db_pool,user_name,log):
sql_se = 'select owner,table_name from all_tables where owner=\'' + str(user_name) + '\' and table_name not like \'%20%\' and rownum <2 '
log.logger.info(sql_se)
sql_se_re = db_pool.select(sql_se)
log.logger.info(sql_se_re)
return sql_se_re
if __name__ == '__main__':
log_dir = sys.path[0]
log = Logger(log_dir+'/logs/table_check_count_gq.log', level='info')
log.logger.info('--------------------------------------------------------')
user_list = ['CD','ID','AD','SD','PD','CP','MD']
manager = multiprocessing.Manager()
manager1 = multiprocessing.Manager()
user_table_list = manager.list()
table_list = []
db_pool = get_connect_oracle.getCnOra('GQJFB',log)
table_count = manager.list()
pool = multiprocessing.Pool(processes = 10)
for user_name in user_list:
table_list.extend(getNeedCheckTable(db_pool,user_name,log))
log.logger.info('table_all_count:'+str(len(table_list)))
log.logger.info(table_list)
for table in table_list:
pool.apply_async(ClockProcess,(db_pool,table,table_count,log))
pool.close()
pool.join()
log.logger.info(table_count)
count_file = log_dir+'/logs/table_count_file_gq.'+str(datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
with open(count_file,'w') as f:
f.write('\n'.join(table_count))
del db_pool
自定义方法:
get_connect_oracle:
import cx_Oracle
from dbutils.pooled_db import PooledDB
import os
class getCnOra:
def __init__(self,db_name,log_name):
self.area_list = {
}
self.area_link = {'}
self.db_name = db_name
self.log = log_name
self.getPool()
def getPool(self):
if self.db_name != 'GQJFB':
try:
db_num = self.area_link.get(self.db_name)
self.log.logger.info('err0:数据库ldap串编码:'+str(db_num))
except Exception as r:
self.log.logger.error('err1:数据库ldap串编码获取失败'+ r)
try:
db_str = self.getCn(db_num)
# self.log.logger.info('数据库获取串:'+db_str)
except Exception as s:
self.log.logger.error('err2:数据库ldap串获取失败'+s)
else:
db_str = 'xx/xxxx#@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxxx))'
user_end_area = db_str.find('/')
link_start_area = db_str.rfind('@')
# print(user_end_area)
# print(link_start_area)
oracle_username = db_str[0:user_end_area]
oracle_passwd = db_str[user_end_area + 1:link_start_area]
oracle_link = db_str[link_start_area + 1:]
try:
db_pool = PooledDB(
creator = cx_Oracle,
maxconnecti** = 10,
mincached = 2,
maxshared = 0,
blocking = True,
setsession = [],
ping = 0,
user = oracle_username,
password = oracle_passwd,
dsn = oracle_link,
encoding = 'utf-8'
)
self.conn = db_pool.connection()
self.cur = self.conn.cursor()
except Exception as u:
self.log.logger.error('数据库创建连接失败' + u)
def select(self,sql):
try:
self.cur.execute(str(sql))
except Exception as e:
# print('err'+str(e))
self.log.logger.error('abb')
self.log.logger.error('SQL执行异常 -%s -%s ' % (sql,e))
self.log.logger.error('bbb')
else:
self.res = self.cur.fetchall()
return self.res
if __name__ == '__main__':
print('ok')
问题:
日志中显示pool.apply_async(ClockProcess,(db_pool,table,table_count,log)) 这段未执行,函数并没有被调用,求教什么原因,怎么调整
2022-06-21 17:14:23,709 - /billapp/other/shell/ims_shell/cuto_check_count.py[line:81] - INFO: ('用户, '表名')
2022-06-21 17:14:23,718 - /billapp/other/shell/ims_shell/cuto_check_count.py[line:86] - INFO: []
|
|