asyn_send_reboort_to_dev.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # coding=utf-8
  2. import sys
  3. import os
  4. import csv
  5. from concurrent.futures import ThreadPoolExecutor, as_completed
  6. from base import init_env
  7. env = sys.argv[1]
  8. os.environ.setdefault('DJANGO_SETTINGS_MODULE', env)
  9. init_env(interactive=False)
  10. from apps.web.device.models import Device
  11. from apps.web.core.networking import MessageSender
  12. # class MQTTException(Exception):
  13. # pass
  14. errorDevNOs = list()
  15. def get_device():
  16. return ["865650040560647", "865650040560647", "865650040560647"]
  17. # return DeviceUpgradeLog.objects.values_list("devNo")
  18. def reboot_device(devNo):
  19. # dev = Device.get_dev(devNo)
  20. # server = dev.get("server", "120.27.251.159:1883")
  21. #
  22. # ip1, port = server.split(":")
  23. #
  24. # result = MessageSender.send(
  25. # dev,
  26. # 202,
  27. # {
  28. # "IMEI": devNo,
  29. # "addr_set": {
  30. # "ip1": ip1,
  31. # "port": port
  32. # }
  33. # },
  34. # timeout=60
  35. # )
  36. #
  37. # if result.get("rst") != 0:
  38. # return devNo
  39. return "OK"
  40. # def callback_func(future):
  41. # """
  42. # 回调函数的参数是自身
  43. # :param future:
  44. # :return:
  45. # """
  46. # e = future.exception()
  47. # if e and isinstance(e, MQTTException):
  48. # errorDevNOs.append()
  49. def main():
  50. # 获取所有的需要重启的设备
  51. devNos = get_device()
  52. print devNos
  53. with ThreadPoolExecutor(max_workers=20) as executor:
  54. toDo = list()
  55. for devNo in devNos:
  56. future = executor.submit(reboot_device, devNo)
  57. # future.add_done_callback(callback_func)
  58. toDo.append(future)
  59. for f in as_completed(toDo):
  60. print f.result()
  61. if f.result() != "OK":
  62. errorDevNOs.append({"devNo": f.result()})
  63. with open("errorDevNos.csv", "w") as csvFile:
  64. fieldnames = ["devNo"]
  65. w = csv.DictWriter(csvFile, fieldnames)
  66. w.writeheader()
  67. w.writerows(errorDevNOs)
  68. print "ok, all tasks has been done!!!"
  69. if __name__ == '__main__':
  70. main()