# coding=utf-8 import sys import os import csv from concurrent.futures import ThreadPoolExecutor, as_completed from base import init_env env = sys.argv[1] os.environ.setdefault('DJANGO_SETTINGS_MODULE', env) init_env(interactive=False) from apps.web.device.models import Device from apps.web.core.networking import MessageSender # class MQTTException(Exception): # pass errorDevNOs = list() def get_device(): return ["865650040560647", "865650040560647", "865650040560647"] # return DeviceUpgradeLog.objects.values_list("devNo") def reboot_device(devNo): # dev = Device.get_dev(devNo) # server = dev.get("server", "120.27.251.159:1883") # # ip1, port = server.split(":") # # result = MessageSender.send( # dev, # 202, # { # "IMEI": devNo, # "addr_set": { # "ip1": ip1, # "port": port # } # }, # timeout=60 # ) # # if result.get("rst") != 0: # return devNo return "OK" # def callback_func(future): # """ # 回调函数的参数是自身 # :param future: # :return: # """ # e = future.exception() # if e and isinstance(e, MQTTException): # errorDevNOs.append() def main(): # 获取所有的需要重启的设备 devNos = get_device() print devNos with ThreadPoolExecutor(max_workers=20) as executor: toDo = list() for devNo in devNos: future = executor.submit(reboot_device, devNo) # future.add_done_callback(callback_func) toDo.append(future) for f in as_completed(toDo): print f.result() if f.result() != "OK": errorDevNOs.append({"devNo": f.result()}) with open("errorDevNos.csv", "w") as csvFile: fieldnames = ["devNo"] w = csv.DictWriter(csvFile, fieldnames) w.writeheader() w.writerows(errorDevNOs) print "ok, all tasks has been done!!!" if __name__ == '__main__': main()