• Python Threading多线程简单例子


    业务监控,多线程例子,实现每类个监控项的不同监控间隔。
    #coding=utf-8
    import sys
    import pymysql
    import os
    from prometheus_client import Gauge,start_http_server
    import time
    import threading
    #v_host=os.popen('echo $HOSTNAME')
    #hostname=v_host.read()
    #hstname="".join(hostname)
    #print(hostname.strip())
    class MySQL_Status_Output:
        def __init__(self,host,port,user,password):
            try:
                self.db = pymysql.connect(host=host,port=port,user=user,password=password)
            except Exception as e:
                print('Database Connection Error')
                print(e)
        def mysql_select_colum_sql(self,sql):
            try:
                self.cursor = self.db.cursor(cursor = pymysql.cursors.DictCursor)
                self.cursor.execute(sql)
                v_result=self.cursor.fetchall()
                return v_result
            except Exception as e:
                print('SQL Result One Column Error')
                print(e)
        def mysql_select_sql(self,sql):
            try:
                self.cursor = self.db.cursor()
                self.cursor.execute(sql)
                col=self.cursor.description
                v_result=self.cursor.fetchall()
                return v_result,col
            except Exception as e:
                print('SQL Result More Column Error')
                print(e)
        def close_db(self):
            self.db.close()
    def ccpay_sql_one_exec(sql_exec,t):
        while True:
            time.sleep(t)
            try:
                pro_db = MySQL_Status_Output('127.0.0.1',3306,'dbadmin','dbadmin')
                ccpay_sql = pro_db.mysql_select_colum_sql(sql_exec)
                pro_db.close_db()
                if int(len(ccpay_sql))==1:
                    for i in range(len(ccpay_sql)):
                        c=ccpay_sql[i]
                        a=list(c.keys())
                        for j in range(len(a)):
                            print(a[j],':',c.get(a[j]))
                            ccpayGauge.labels(mylabelname=a[j]).set(c.get(a[j]))
                else:
                    pass
            except Exception as e:
                print('One Colum ccpayGauge Error')
                print(e)
    def ccpay_sql_more_exec(sql_exec,t):
        while True:
            time.sleep(t)
            try:
                pro_db = MySQL_Status_Output('127.0.0.1',3306,'dbadmin','dbadmin')
                ccpay_sql,col_name = pro_db.mysql_select_sql(sql_exec)
                if int(len(ccpay_sql))>0:
                    bs_name=[]
                    for i in range(len(ccpay_sql)):
                        bs_name.append(ccpay_sql[i][0])
                    print(bs_name)
                    for bsname in range(len(bs_name)):
                        col_name_list=[]
                        for i in range(len(col_name)):
                            col_name_list.append(col_name[i][0])
                        col_name_tuple=tuple(col_name_list)
                        ccpay_value_list=[]
                        for j in range(len(ccpay_sql)):
                            if ccpay_sql[j][0]==bs_name[bsname]:
                                ccpay_value_list=ccpay_sql[j]
                                me=dict(zip(col_name_tuple,ccpay_value_list))
                                for key in me:
                                    bn=str(bs_name[bsname]+key)
                                    bkey=str(me[key])
                                    if str(bs_name[bsname])==str(bkey):
                                        pass
                                    else:
                                        print(bn,':',bkey)
                                        ccpayGauge.labels(mylabelname=bn).set(bkey)
            except Exception as e:
                print('More Colums ccpayGauge Error')
                print(e)

    ##设备状态
    def ccpay_sql_table_exec(sql_exec,t):
        while True:
            time.sleep(t)
            try:
                pro_db = MySQL_Status_Output('127.0.0.1',3306,'dbadmin','dbadmin')
                ccpay_sql = pro_db.mysql_select_colum_sql(sql_exec)
                pro_db.close_db()
                resultdc=eval(str(ccpay_sql).replace('Decimal', '').replace('(', '').replace(')', ''))
                for x in resultdc:
                    print(x)
                    ccpayTable.labels(A_MERCHANT=x['MERCHANT'],B_MACHINE_STATUS=x['MACHINE_STATUS']).set(x['QUANTITY'])
            except Exception as e:
                print('Table ccpayTable Error')
                print(e)
    ##子账号交易明细
    def ccpay_sql_table_sub(sql_exec,t):
        while True:
            time.sleep(t)
            try:
                pro_db = MySQL_Status_Output('127.0.0.1',3306,'dbadmin','dbadmin')
                ccpay_sql = pro_db.mysql_select_colum_sql(sql_exec)
                pro_db.close_db()
                resultdc=eval(str(ccpay_sql).replace('Decimal', '').replace('(', '').replace(')', ''))
                for x in resultdc:
                    print(x)
                    ccpayTablesub.labels(B_ACCOUNT=x['账号'],A_MERCHANT=x['商户号'],C_SUCCESS=str(x['成功笔数']), D_CONCAT=str(x['成功率'])).set(x['成功金额'])
            except Exception as e:
                print('Table ccpayTablesub Error')
                print(e)

    if __name__ == "__main__":
        start_http_server(9900)
        ccpayGauge = Gauge('ccpayGauge','Description of gauge', ['mylabelname'])
        ccpayTable = Gauge('ccpayTable','Description of table',['A_MERCHANT','B_MACHINE_STATUS'])
        ccpayTablesub = Gauge('ccpayTablesub','Description of tablesub', ['B_ACCOUNT', 'A_MERCHANT', 'C_SUCCESS', 'D_CONCAT'])
        try:
            ##全盘交易统计
            Total_Transaction_Statistics = threading.Thread(target=ccpay_sql_one_exec,args=(" select count(1) '全盘交易笔数',count(case when trade_status !='FAILED' then 1 else null end) '全盘出码成功',count(case when trade_status ='SUCCESS' then 1 else null end) '全盘交易成功',count(case when notify_status ='SUCCESS' then 1 else null end) '全盘通知成功',sum(case when  trade_status ='SUCCESS' then TRADE_AMOUNT else null end)/100 '全盘成功金额',count(case when trade_status ='FAILED' and trade_errmsg = '指定设备无响应' then 1 else null end) '指定设备无响应',count(case when trade_status ='FAILED' and trade_errmsg = '找不到可用的设备' then 1 else null end) '找不到可用的设备',TRUNCATE(count(case when trade_status ='SUCCESS' then 1 else null end)*100/count(1),2) '全盘交易成功率' from ifpay_ccpay.trade_info where CREATE_TIME > curdate() ",60,))
            ##可用设备数
            Available_Machine_Quantity = threading.Thread(target=ccpay_sql_one_exec,args=(" select count(1) '可用设备' from ifpay_ccpay.machine where ENABLE_STATUS = '1' ",60,))
            ##商户交易统计
            Merchant_Transaction_Statistics = threading.Thread(target=ccpay_sql_more_exec,args=(" select MERCHANT_name '商户名称',case when total   is null then 0 else total end '交易笔数',case when qrcode  is null then 0 else qrcode end '出码成功',case when success is null then 0 else success end '交易成功',case when notify  is null then 0 else notify end '通知成功',case when amount  is null then 0 else amount end '成功金额' from (select a.MERCHANT_name MERCHANT_name,count(1) total,count(case when trade_status !='FAILED' then 1 else null end) qrcode,count(case when trade_status ='SUCCESS' then 1 else null end) success,count(case when notify_status ='SUCCESS' then 1 else null end) notify,sum(case when  trade_status ='SUCCESS' then TRADE_AMOUNT else null end)/100 amount from ifpay_ccpay.trade_info,ifpay_ccpay.merchant a where MERCHANT_NO=a.MERCHANT_id  and CREATE_TIME > curdate() group by a.MERCHANT_name) a  ",60,))
            ##全天支付成功率
            Total_Payment_Success_Rate = threading.Thread(target=ccpay_sql_more_exec,args=(" select  method '支付方式',TRUNCATE(count(case when trade_status ='SUCCESS' then 1 else null end)*100/count(*),2) '-支付成功率' from ifpay_ccpay.trade_info where CREATE_TIME > curdate() group by method ",60,))
            ##30分钟内支付成功率
            Total_Payment_Success_Rate_30Min = threading.Thread(target=ccpay_sql_more_exec,args=("select method '支付方式',(case when rait is null then 0 else  rait end) '-30分钟内支付成功率' from (select  method ,TRUNCATE(count(case when trade_status ='SUCCESS' then 1 else null end)*100/count(case when trade_status !='FAILED' then 1 else null end),2) rait from ifpay_ccpay.trade_info where CREATE_TIME between date_add(now(), interval - 30 minute) and now() group by method) a",300,))
            ##30分钟内,商户支付成功率
            Merchant_Payment_Success_Rate_30Min = threading.Thread(target=ccpay_sql_more_exec,args=("select MERCHANT,(case when rait is null then 0 else rait end) '-商户支付成功率'  from (select  concat(b.MERCHANT_ID,'-',a.method) MERCHANT,TRUNCATE(count(case when a.trade_status ='SUCCESS' then 1 else null end)*100/count(case when a.trade_status !='FAILED' then 1 else null end),2) rait from ifpay_ccpay.trade_info a,ifpay_ccpay.merchant b where a.MERCHANT_NO=b.MERCHANT_ID and a.CREATE_TIME between date_add(now(), interval - 30 minute) and now() group by concat(b.MERCHANT_ID,a.method)) a",300,))
            ##机器故障/可用情况
            Total_Machine_State = threading.Thread(target=ccpay_sql_table_exec,args=(" select MERCHANT_id 'MERCHANT',case when (ENABLE_STATUS=0) then '不可用' when (ENABLE_STATUS=1) then '可用' else 'null' end 'MACHINE_STATUS', count(*) 'QUANTITY' from ifpay_ccpay.machine group by MERCHANT_ID,case when (ENABLE_STATUS=0) then '不可用' when (ENABLE_STATUS=1) then '可用' else 'null' end order by 1 ",60,))
            ##子商户支付详情
            Sub_Merchant_Payment = threading.Thread(target=ccpay_sql_table_sub,args=(" select payee_account_no '账号', merchant_no '商户号', trade_success_count '成功笔数', amount '成功金额',CONCAT(ROUND(trade_success_count*100/trade_count),'%') '成功率' from (select payee_account_no, merchant_no, sum(case trade_status when 'SUCCESS' then 1 else 0 end) trade_success_count, count(*) trade_count, sum(trade_amount)/100  amount from ifpay_ccpay.trade_info where create_time>current_date() group by payee_account_no, merchant_no order by sum(trade_amount) desc) c where trade_success_count>0 limit 10 ",60,))
            Total_Transaction_Statistics.start()
            Available_Machine_Quantity.start()
            Merchant_Transaction_Statistics.start()
            Total_Payment_Success_Rate.start()
            Total_Payment_Success_Rate_30Min.start()
            Merchant_Payment_Success_Rate_30Min.start()
            Total_Machine_State.start()
            Sub_Merchant_Payment.start()     
        except Exception as e:
            print('Threading Is Wrong')
            print(e)
  • 相关阅读:
    c#实现windows远程桌面连接程序
    基于.NET平台常用的框架整理
    c#无限循环线程如何正确退出
    c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参
    coco2d-x convertToWorldSpace介绍
    Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value。Test code
    函数指针与指针函数返回值的区别
    游戏开发那些事
    lua 根据指定字符拆分table字符串(转载)
    实习和学习的双重压力
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/10076683.html
Copyright © 2020-2023  润新知