找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 635|回复: 0

[求助] 进程池pool调用函数时,不执行函数

回帖奖励 1 点威望 回复本帖可获得 1 点威望奖励! 每人限 1 次

1

主题

1

帖子

1

积分

贫民

积分
1
zjn 发表于 2022-6-21 17:42:20 | 显示全部楼层 |阅读模式
执行脚本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: []


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表