[Python] Multithreading para obtener datos, representar notas de gráficos de líneas, organizar

Todo el proceso del artículo obtiene datos a través de la API de Shence, genera un gráfico de tendencia de líneas discontinuas, funciones comerciales y sencillas,

  • matplotlib
  • peticiones
  • enhebrar

recuperar datos


def getData(start, end):
    sql = "select count(distinct(stu_id)) as num, date from events where "+_os+" date between '"+start+"' and '"+end+"' and business='ai'  group by date order by date"
    print(sql)
    data = {
    
    'format': 'json', 'q': sql}
    req_url = "https://"+url+"/api/sql/query?token="+token+"&project=production"
    req_header = {
    
    
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
    response = requests.post(req_url,data = data, headers = req_header)
    rst = response.text.split('\n')
    del rst[-1]
    print('user'+str(len(rst)))

    return rst

Tenga en cuenta aquí que del rst [-1] elimina los últimos datos vacíos para evitar un análisis anormal más adelante.
El otro es el paquete de aprendizaje de solicitudes
Inserte la descripción de la imagen aquí

Renderizar la imagen

def showImage(xs,ys,hs):
    plt.figure(num=1, figsize=(len(xs)//5,10))
    plt.ylabel('count', color='red')
    plt.xticks(rotation=45, fontsize=10) 
    plt.xlabel("date", fontsize=10)
    #设置区间
    plt.xlim(0,len(ys))
    plt.ylim(0,max(xs)+100)
    #设置显示间隔 
    y_major_locator=MultipleLocator(200) # y轴 0 200 400 600间隔都是200
    x_major_locator=MultipleLocator(len(xs)//30) 
    #设置边距
    plt.subplots_adjust(left=0.05, right=0.95, top=0.9, bottom=0.1)
    plt.title(gstart+"~"+gend, fontsize=20)
    # 这里是核心渲染的数据
    plt.plot(ys,xs, color='green', linewidth=3, label='total')
    plt.plot(ys,hs, color='red', linestyle='--', linewidth=2, label='support')
    # --- end -- 
    plt.legend() #显示图例
    plt.savefig("人数-"+gstart+"~"+gend+".png", bbox_inches='tight')
    # plt.show();

Inserte la descripción de la imagen aquí
Dirección de referencia de aprendizaje de gráfico de líneas https://www.runoob.com/w3cnote/matplotlib-tutorial.html

Foto tigre pintura gato hilo

import threading
import time

class TaskThread(threading.Thread):
    def __init__(self, func, args=()):
        super(TaskThread, self).__init__()
        self.func = func
        self.args = args

    def run(self):
        self.result = self.func(self.args)

    def getresult(self):
        try:
            return self.result
        except Exception as ex:
            print(ex)
            return "ERROR"

Hay dos líneas en la imagen, lo que significa que hay dos conjuntos de datos comparativos. Si solicita una solicitud por separado, tomará alrededor de 20 segundos para el total. Aprendamos más. Después de leer la parte del hilo, tomaré una foto. del gato y moverlo. Aproximadamente 7 ~ 9 segundos después del hilo;


def main():
    usertask = taskthread.TaskThread(getUserTask, args=[gstart, gend])
    helptask = taskthread.TaskThread(getHelpTask, args=[gstart, gend])
    tasklist = [usertask,helptask]
    usertask.start()
    helptask.start()

    resultlist = []
    for task in tasklist:
        task.join()
        resultlist.append(task.getresult())

    showResult(resultlist[0], resultlist[1])


if __name__ == "__main__":
    _sts = int(time.time()*1000)
    # user = getData(gstart, gend)
    # helplist = getHelpData(gstart, gend)
    # showResult(user, helplist)
    main()
    print('dur',int(time.time()*1000) - _sts)

El código fuente se ha enviado a git https://github.com/ibeeger/python-learn

Supongo que te gusta

Origin blog.csdn.net/uk_51/article/details/109052582
Recomendado
Clasificación