# -*- coding: utf-8 -*- # !/usr/bin/env python import os import sys from concurrent.futures import ThreadPoolExecutor, Future PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..') sys.path.insert(0, PROJECT_ROOT) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.production') from script.base import init_env init_env(False) from django.conf import settings from apps.web.device.models import Device, DeviceDict from apps.web.device.define import DeviceChannelType from apps.web.core.mqtt_client import MqttClient from apps.web.core.sysparas import SysParas def is_online(devNo): return bool(Device.get_dev(devNo).online) def done_callback(f): # type:(Future) -> None debug, devNo = f.result() if debug: print('{} debug.'.format(devNo)) else: with open("done_kick_off.txt", "a") as f: f.write("{}\n".format(devNo)) def operate_kick_off(devNo, port): try: mqttc = MqttClient(client_id = devNo) mqttc.username_pw_set(settings.MQTT_USER, settings.MQTT_PSWD) mqttc.connect(SysParas.get_private_ip(settings.MQTT_HOSTNAME), port, 60) finally: mqttc.disconnect() mqttc.close() def kick_off(devNo, debug, check_port): if debug: return debug, devNo else: operate_kick_off(devNo, check_port) return debug, devNo def run(debug, devNoList, check_port): with ThreadPoolExecutor(max_workers = 20) as executor: for devNo in devNoList: executor.submit(kick_off, devNo, debug, check_port).add_done_callback( done_callback) if __name__ == '__main__': __list = [] __done_list = [] check_port = 1884 try: with open("done_kick_off.txt", "r") as f: lines = f.readlines() for line in lines: line = line.strip() __done_list.append(line) except Exception as e: pass try: with open("e:\\temp\\{}\\kick_off.txt".format(check_port), "r") as f: lines = f.readlines() for line in lines: line = line.strip() if line not in __done_list: __list.append(line) except Exception as e: pass run(debug = False, devNoList = __list, check_port = check_port)