deal_cutout.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import time
  2. from concurrent.futures import as_completed, ThreadPoolExecutor, wait
  3. import threading
  4. from .remove_bg_pixian import RemoveBgPiXian
  5. from .other.module_online_data import GetOnlineData
  6. from .deal_one_image import DealOneImage, DealOneImageBeforehand
  7. from .other.log import MyLogger
  8. class DealCutout(threading.Thread):
  9. def __init__(self):
  10. super().__init__()
  11. self.lock = threading.Lock()
  12. self.need_cutout_images = {}
  13. self.state = 2 # 1进行中 2停止
  14. self.get_online_data = GetOnlineData()
  15. self.is_upload_pic_num = 0
  16. self.is_deal_num = 0
  17. # 图片列表
  18. self.upload_pic_dict = {}
  19. self.logger = MyLogger().logger
  20. def run(self):
  21. self.get_online_data.refresh_headers()
  22. executor = ThreadPoolExecutor(max_workers=4)
  23. executor_pic_upload = ThreadPoolExecutor(max_workers=2)
  24. tasks_1 = []
  25. tasks_2 = []
  26. self.state = 1
  27. self.is_upload_pic_num = 0
  28. self.is_deal_num = 0
  29. num = 0
  30. for image_data in self.need_cutout_images:
  31. if not image_data["need_cutout"]:
  32. continue
  33. num += 1
  34. task_1 = executor.submit(DealOneImage(image_data=image_data, lock=self.lock, windows=self, num=num).run)
  35. tasks_1.append(task_1)
  36. task_2 = executor_pic_upload.submit(
  37. DealOneImageBeforehand(image_data=image_data, lock=self.lock, windows=self, num=num).run)
  38. tasks_2.append(task_2)
  39. self.check_thread(tasks_1, tasks_2)
  40. def check_thread(self, *tasks_list):
  41. time.sleep(2)
  42. while 1:
  43. f = True
  44. for tasks in tasks_list:
  45. done, not_done = wait(tasks)
  46. if not_done:
  47. time.sleep(2)
  48. f = False
  49. continue
  50. for task in done:
  51. try:
  52. result = task.result()
  53. # print(result)
  54. except BaseException as e:
  55. self.logger.info("有线程出错:{}".format(e))
  56. if f:
  57. break
  58. # self.signal_data.emit({"_type": "complete",
  59. # "data": ""})