生成

130 阅读1分钟
import json
import time
from config import cfg
from chain_data.driver import DbMytokenConn
from address_overview.driver import RedCli
from kafka import KafkaProducer
from kafka.errors import KafkaError

r = RedCli()
dbmt = DbMytokenConn()

# 定时任务生产
def task_data_producer(dic_ass):
    producer = KafkaProducer(bootstrap_servers=cfg.get('kafka', 'online_brokers').split(','))
    topic = "topic_a"
    try:
        producer.send(topic, json.dumps(dic_ass).encode())
        print("send:" + json.dumps(dic_ass))
    except KafkaError as e:
        print(e)
    finally:
        producer.close()
        print('done')

def tuple_change_dict(a):
    for v in a:
        dic = {'market_id': str(v[0]),
               'contract_address': str(v[1]),
               'lock_usd': float(v[2])}
        task_data_producer(dic)

def process_msg():
    now_time = int(time.time())
    utc8Hour0Time = int(time.mktime(time.strptime(time.strftime("%Y-%m-%d", time.localtime(now_time)), "%Y-%m-%d")))
    CHAIN_CURRENCY_DATA_LAST_KEY = 'chain_currency_data_last_offset_id_time_{}'.format(utc8Hour0Time)
    if r.reCli.get(CHAIN_CURRENCY_DATA_LAST_KEY) is None:
        offset = 0
    else:
        offset = int(r.reCli.get(CHAIN_CURRENCY_DATA_LAST_KEY))

    while True:
        rawSQL  = "SELECT `market_id`,`contract_address`,lock_usd  FROM `chain_currency_data` " \
            "where theday < {} ORDER BY `lock_usd` DESC  limit {},10".format(utc8Hour0Time, offset)
        qlalchemy_object = dbmt.mt_engine.execute(rawSQL)
        if not qlalchemy_object.rowcount:
            break
        tuple_change_dict(qlalchemy_object)
        offset += 1
        r.reCli.set(CHAIN_CURRENCY_DATA_LAST_KEY, offset)


if __name__ == '__main__':
    print('ProductionMsg Starting.')
    process_msg()
    print('ProductionMsg Stop.')