Python多线程+队列调用接口

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: 风过无言花易落
# @Date  : 2021/03/31 14:33
# @Desc  : 接口多线程调用

'''
 mvno_token模块样例

allmark = {
        'test':{
        "ABC": ("5hdoc0g", "WFykRKbDPMiTZRnU1pw7296Pl8zgrbM4hV7I16jGAAyNxEgu"),
        "DFG": ("6jj4HEs", "LCJaN1WeTNzbmsRPjWvNCEpbOryXe9eNOi9JC5JqP37WmdiK")
                }
}
'''

import requests
import json
import string
import timeit
import time
from time import sleep,strftime
import random
import sql
import os
import mvno_token
import threading
from queue import Queue
from log import logs

path = str(os.path.dirname(__file__))
base_dir = path.replace('\\', '/')
log = logs('ERROR',os.path.basename(__file__).split(".")[0])

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += 'HIGH:!DH:!aNULL'
requests.packages.urllib3.disable_warnings()
log.debug('当前路径:{}'.format(base_dir))

API_IP = "123.123.123.123"  # 云化环境

class Creat_Thread(threading.Thread):
    def __init__(self, mode_type , t_msg , data_queue):
        threading.Thread.__init__(self)
        self.data_queue = data_queue
        self.mode_type = mode_type
        self.t_msg = t_msg

    def run(self):
        start = timeit.default_timer()
        log.error(':{}:--------------------------run----------------------------'.format(self.t_msg))
        try:
            while True:
                if self.data_queue.empty():
                    log.error(':{}:All items have been taken off the queue'.format(self.t_msg))
                    break;
                else:
                    dataFromQueue = self.data_queue.get_nowait()
                    log.debug(':{}:run-dataFromQueue:'.format(self.t_msg,dataFromQueue))
                    url, data_service = modify_service_lsms(self.mode_type,
                                                    dataFromQueue['svc_number'],
                                                    dataFromQueue['mvno_business_mark'])
                    log.debug(':{}:run-url:{}'.format(self.t_msg,url))
                    data = json.dumps(data_service, indent=4) #字典转换json格式,并且带格式
                    # print(data)
                    log.debug(':{}:run-data:{}'.format(self.t_msg,data))
                    try:
                        rsp = requests.post(url=url, data=data, verify=False) # 请求
                        #由更新 改为直接插入
                        # update_ldnum = {
                        #     'FLAG' : 1,
                        #     'SVC_NUMBER' : dataFromQueue['svc_number']
                        # }
                        # msg = sql.update_modify_lsms_user(update_ldnum)
                        insert_data = [(
                            dataFromQueue['svc_number'], dataFromQueue['mvno_business_mark'],dataFromQueue['prov_code'],
                            dataFromQueue['eparchy_code'], time.strftime('%Y-%m-%d %H:%M:%S.0', time.localtime()), 1)]
                        log.debug('insert_data:{}'.format(insert_data))
                        modify_lsms_user = sql.insert_modify_lsms_user(insert_data)
                        # print('操作数据入表:', modify_lsms_user)
                        log.debug(':{}:->号码:{}->数据入表->modify_lsms_user:{}'.format(self.t_msg,
                                                                        dataFromQueue['svc_number'],modify_lsms_user))
                    except Exception as e:
                        print('接口调用失败:{}'.format(e))
                    rsp_json = rsp.json() #响应文本json化
                    print(rsp_json)
                    log.debug(':{}:Response:{}->{}'.format(self.t_msg,dataFromQueue['svc_number'],rsp.text))
                    try:
                        if "data" in rsp_json and rsp_json.get('data').get('message') == 'SUCCESS':
                            log.error(':{}:run-rsp_json:{}:-:{}'.format(self.t_msg,'SUCCESS',
                                                                               dataFromQueue['svc_number']))
                            with open("Seccess_number.txt", 'a') as file:
                                file.write(strftime("%Y-%m-%d %H:%M:%S") + ':' + dataFromQueue['mvno_business_mark'] +
                                           ',' + str(dataFromQueue['svc_number']) + ',' + str(data_service['data']['order_id']) + '\n')
                        else:
                            log.error(':{}:run-rsp_json:{}:-:{}'.format(self.t_msg, 'Fail',
                                                                        dataFromQueue['svc_number']))
                            with open("fail_number.txt", 'a') as file:
                                file.write(strftime("%Y-%m-%d %H:%M:%S") + ':' + dataFromQueue['mvno_business_mark'] +
                                           ',' + str(dataFromQueue['svc_number']) +  ',' + str(data_service['data']['order_id']) +'\n')
                    except Exception as e:
                        log.debug(':{}:Error:-->{}'.format(self.t_msg,e))
        except Exception as e:
            log.info(':{}:Creat_Thread-run-Exception:-->{}'.format(self.t_msg,e))
        end = timeit.default_timer()
        print('--Running time: %s Seconds' % (end - start))


def getRandomString(number):

    rule = string.ascii_letters + string.digits
    str = random.sample(rule, number)
    return "".join(str)

def modify_service_lsms(mode_type,svc_number, mvno_business_mark):

    mvnokey,token = mvno_token.mvno_token(mode_type,mvno_business_mark)
    serial_number = "LDBGAPI" + strftime("%Y%m%d%H%M%S") + getRandomString(9)
    timestamp = strftime("%Y-%m-%d %H:%M:%S")
    service = {
        "mvnokey": mvnokey,
        "serial_number": serial_number,
        "timestamp": timestamp,
        "service_type": "basic_service",
        "service_name": "requests_url",
        "api_name": "cu.vop.basic_service.requests_url",
        "data": {
            "order_id": serial_number + "0000",
            "phone_number": svc_number
        }
    }
    global API_IP
    url = '接口地址'
    return url, service


if __name__ == '__main__':
    import ctypes
    nowTime = time.strftime('%m%d_%H', time.localtime(time.time()))
    pid = os.getpid()
    log.error('Process-ID:-->{}'.format(pid))
    print('Process-ID:-->{}'.format(pid))
    #*********************************************************************************
    # p = psutil.Process(pid)
    # log.error( '\r' +
    #            '{}'.format('*'*150) + '\r'
    #             'Process-ID:-->{}'.format(pid) + '\r'
    #             'Process-Name:-->{}'.format(p.name()) + '\r'
    #             'CPU-Usage:-->{}'.format(p.cpu_times()) + '\r'
    #             'Memory-usage:-->{}'.format(p.memory_percent()) + '\r'
    #             'Disk-Read-Msg:-->{}'.format(p.io_counters()) + '\r'
    #             'Process-Thread-Num:-->{}'.format(p.num_threads()) + '\r'
    #              '{}'.format('*'*150) + '\r'
    #           )
    # **********************************************************************************
    data_queue = Queue()  # 创建队列
    #*********************************************************************************
    data_dict = {
        'PROV_CODE' : '86',
        'FLAG':'0'
    }
    mode_type = 'test'  #获取 什么环境 中得 mvnokey token (测试 = test 、 生产 = produce)
    thread_num = 50  # 线程数
    #*********************************************************************************
    print('备份&删除-数据操作状态表记录:modify_lsms_user 中....')
    create_msg = sql.create_modify_lsms_user(nowTime)
    print('备份:{}'.format(create_msg))
    truncate_msg = sql.truncate_modify_lsms_user()
    print('删除:{}'.format(truncate_msg))
    data = sql.modify_lsms(data_dict) #获取漏电要变更得手机号码。入参省份和地市
    log.debug('本次执行数据:{}'.format(data))

    if data is None or data == []:
        print('modify_lsms无可用数据')
        exit(1)

    insert_mlu = []
    for i in data:
        # insert_data = (i[0],i[1],i[2],i[3],time.strftime('%Y-%m-%d %H:%M:%S.0', time.localtime()),i[4])
        # insert_mlu.append(insert_data)
        ld_data = {
            'svc_number':int(i[0]),
            'mvno_business_mark':i[1],
            'prov_code':i[2],
            'eparchy_code':i[3]
        }
        data_queue.put_nowait(ld_data)

    # modify_lsms_user = sql.insert_modify_lsms_user(insert_mlu)
    # print('操作数据入表:',modify_lsms_user)
    # log.error('数据入表->modify_lsms_user:{}'.format(modify_lsms_user))

    # 创建新线程
    threads = []
    t_msg = 0 #自定义线程号 Python的太难获取
    for tName in range(thread_num):
        t_msg += 1
        # t_id = ctypes.CDLL('libc.so.6').syscall(186) # 获取线程ID,windows环境需要进行适配
        thread = Creat_Thread(mode_type,t_msg,data_queue)
        thread.start()
        threads.append(thread)
    # 等待所有线程完成
    for t in threads:
        t.join()
    print("Exiting Main Thread")

其中sql不做展示,需要可以私密提供

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值