Browse Source

启动脚步改为多线程

zhangyong 7 months ago
parent
commit
af6ed95510
1 changed files with 32 additions and 18 deletions
  1. 32 18
      job_cover_method.py

+ 32 - 18
job_cover_method.py

@@ -1,30 +1,44 @@
-import asyncio
 import time
+from concurrent.futures import ThreadPoolExecutor, as_completed
 from common.redis import get_pq_id
 from video_cover_method.cover_method import CoverMethod
 
-semaphore = asyncio.Semaphore(10)  # 限制并发为 10 个
+# 限制最大线程数为 10
+max_workers = 10
 
-async def get_video_id():
-    while True:
+
+def get_video_id():
+    video_ids = []
+    for i in range(10):
         video_id = get_pq_id()
         if video_id:
-            return video_id
+            video_ids.append( video_id )
         else:
-            print("没有获取待更改封面的视频ID,等待5秒")
-            await asyncio.sleep(5)
+           return video_ids
+    return video_ids
+
+def process_video_cover(video_id):
+    try:
+        CoverMethod.cover_method( int( video_id ) )
+    except Exception as e:
+        print( "处理任务时出现异常:", e)
+
 
-async def process_video_cover(video_id):
-    async with semaphore:  # 限制并发
-        try:
-            await CoverMethod.cover_method(int(video_id))
-        except Exception as e:
-            print("处理任务时出现异常:", e)
+def video_cover_task_start():
+    with ThreadPoolExecutor( max_workers=max_workers) as executor:
+        futures = []
+        while True:
+            video_ids = get_video_id()
+            if not video_ids:
+                print("没有数据等待30秒")
+                time.sleep(30)
+                continue
+            for video_id in video_ids:
+                futures.append( executor.submit( process_video_cover, video_id ) )
+                # 等待完成的任务并清理
+            for future in as_completed( futures ):
+                futures.remove( future )
 
-async def video_cover_task_start():
-    while True:
-        video_id = await get_video_id()
-        asyncio.create_task(process_video_cover(video_id))  # 创建异步任务
 
 if __name__ == '__main__':
-    asyncio.run(video_cover_task_start())
+    video_cover_task_start()