浏览代码

修复并发问题

Signed-off-by: 716 <[email protected]>
716 4 年之前
父节点
当前提交
86bd3778af
共有 3 个文件被更改,包括 33 次插入40 次删除
  1. 2 6
      downloader.go
  2. 1 1
      go.mod
  3. 30 33
      main.go

+ 2 - 6
downloader.go

@@ -68,9 +68,6 @@ func (d Downloader) DownloadSub4Movie(dir string) error {
 		if err != nil {
 			d.log.Error(err)
 		}
-		// 注意并发 pool 的释放
-		defer ants.Release()
-
 		log.Infoln("Download Movie Sub End...")
 	}()
 
@@ -112,6 +109,7 @@ func (d Downloader) DownloadSub4Movie(dir string) error {
 	if err != nil {
 		return err
 	}
+	defer p.Release()
 	// 一个视频文件同时多个站点查询,阻塞完毕后,在进行下一个
 	for i, oneVideoFullPath := range nowVideoList {
 		wg.Add(1)
@@ -131,9 +129,6 @@ func (d Downloader) DownloadSub4Series(dir string) error {
 		if err != nil {
 			d.log.Error(err)
 		}
-		// 注意并发 pool 的释放
-		defer ants.Release()
-
 		log.Infoln("Download Series Sub End...")
 	}()
 	log.Infoln("Download Series Sub Started...")
@@ -187,6 +182,7 @@ func (d Downloader) DownloadSub4Series(dir string) error {
 	if err != nil {
 		return err
 	}
+	defer p.Release()
 	// 遍历连续剧总目录下的第一层目录
 	seriesDirList, err := series_helper.GetSeriesList(dir)
 	if err != nil {

+ 1 - 1
go.mod

@@ -10,7 +10,7 @@ require (
 	github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
 	github.com/beevik/etree v1.1.0
 	github.com/gen2brain/go-unarr v0.1.1
-	github.com/go-creed/sat v1.0.3 // indirect
+	github.com/go-creed/sat v1.0.3
 	github.com/go-resty/resty/v2 v2.6.0
 	github.com/go-rod/rod v0.97.2
 	github.com/jonboulle/clockwork v0.2.2 // indirect

+ 30 - 33
main.go

@@ -23,6 +23,8 @@ func init() {
 	}
 }
 
+// TODO 考虑加入 TV 相关季开播的信息读取(每一集都有对应的 nfo 文件,可以考虑从这里面读取),这样可以更加容易判断跳过老的剧集,近期下载了,字幕下载一次即可,无需反反复复
+
 func main() {
 	if log == nil {
 		panic("log init error")
@@ -44,60 +46,55 @@ func main() {
 	}
 	log.Infoln("MovieFolder:", config.MovieFolder)
 
-	// 下载实例
-	downloader := NewDownloader(common.ReqParam{
-		HttpProxy: httpProxy,
-		DebugMode: config.DebugMode,
-		SaveMultiSub: config.SaveMultiSub,
-		Threads: config.Threads,
-		SubTypePriority: config.SubTypePriority,
-	})
 	//任务还没执行完,下一次执行时间到来,下一次执行就跳过不执行
 	c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))
 	// 定时器
 	entryID, err := c.AddFunc("@every " + config.EveryTime, func() {
-		defer func() {
-			log.Infoln("Download One End...")
-		}()
-
-		log.Infoln("Download One Started...")
-		// 开始下载
-		err := downloader.DownloadSub4Movie(config.MovieFolder)
-		if err != nil {
-			log.Errorln("DownloadSub4Movie", err)
-			return
-		}
 
-		err = downloader.DownloadSub4Series(config.SeriesFolder)
-		if err != nil {
-			log.Errorln("DownloadSub4Series", err)
-			return
-		}
+		DownLoadStart(httpProxy)
 	})
 	if err != nil {
 		log.Errorln("cron entryID:", entryID, "Error:", err)
 		return
 	}
-
 	log.Infoln("First Time Download Start")
-	// 立即触发第一次的更新
+
+	DownLoadStart(httpProxy)
+
+	log.Infoln("First Time Download End")
+
+	c.Start()
+	// 阻塞
+	select {}
+}
+
+func DownLoadStart(httpProxy string) {
+	defer func() {
+		log.Infoln("Download One End...")
+	}()
+
+	// 下载实例
+	downloader := NewDownloader(common.ReqParam{
+		HttpProxy:       httpProxy,
+		DebugMode:       config.DebugMode,
+		SaveMultiSub:    config.SaveMultiSub,
+		Threads:         config.Threads,
+		SubTypePriority: config.SubTypePriority,
+	})
+
+	log.Infoln("Download One Started...")
 	// 开始下载
-	err = downloader.DownloadSub4Movie(config.MovieFolder)
+	err := downloader.DownloadSub4Movie(config.MovieFolder)
 	if err != nil {
 		log.Errorln("DownloadSub4Movie", err)
 		return
 	}
+
 	err = downloader.DownloadSub4Series(config.SeriesFolder)
 	if err != nil {
 		log.Errorln("DownloadSub4Series", err)
 		return
 	}
-	log.Infoln("First Time Download End")
-
-	c.Start()
-
-	// 阻塞
-	select {}
 }
 
 var(