jachinlin / geektime_dl

把极客时间装进 Kindle
https://jachinlin.github.io/geektime_dl
1.37k stars 356 forks source link

Add one attention point about using thread to run task #59

Closed DasyDong closed 4 years ago

DasyDong commented 4 years ago

切勿使用并发或多线程运行geektime,因为基于tinydb存储天然不支持多并发,在多并发或多线程情况下会导致存储报错。 Issue tinyrecord

codecov[bot] commented 4 years ago

Codecov Report

Merging #59 into master will not change coverage. The diff coverage is 33.33%.

Impacted file tree graph

@@           Coverage Diff           @@
##           master      #59   +/-   ##
=======================================
  Coverage   72.36%   72.36%           
=======================================
  Files          17       17           
  Lines        1017     1017           
=======================================
  Hits          736      736           
  Misses        281      281
Impacted Files Coverage Δ
geektime_dl/cli/query.py 100% <ø> (ø) :arrow_up:
geektime_dl/cli/mp3.py 67.16% <ø> (ø) :arrow_up:
geektime_dl/cli/command.py 82.24% <0%> (ø) :arrow_up:
geektime_dl/cli/ebook.py 64.66% <100%> (ø) :arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update f9b5b8e...acddcbf. Read the comment docs.

jachinlin commented 4 years ago

@DasyDong tinydb 的确不支持并发,这个在代码中也体现了。不管是 DataClient 这个内部类,还是对外接口的各个 cli 命令都是线程安全的。

不知道你是在什么使用场景下,需要额外考虑这个问题?

DasyDong commented 4 years ago

@DasyDong tinydb 的确不支持并发,这个在代码中也体现了。不管是 DataClient 这个内部类,还是对外接口的各个 cli 命令都是线程安全的。

不知道你是在什么使用场景下,需要额外考虑这个问题?

因为我是企业版客户, 会下载所有的课程,单独下载比较慢,所以我是geektime mp4batch 和geektime mp3batch 同时运行,这个场景会遇到报错。但这个报错还不是在命令运行的时候就能发现的, 是通常运行一段时间后才能体现。

既然代码里体现了, 那就忽略吧

jachinlin commented 4 years ago

@DasyDong tinydb 的确不支持并发,这个在代码中也体现了。不管是 DataClient 这个内部类,还是对外接口的各个 cli 命令都是线程安全的。 不知道你是在什么使用场景下,需要额外考虑这个问题?

因为我是企业版客户, 会下载所有的课程,单独下载比较慢,所以我是geektime mp4batch 和geektime mp3batch 同时运行,这个场景会遇到报错。但这个报错还不是在命令运行的时候就能发现的, 是通常运行一段时间后才能体现。

既然代码里体现了, 那就忽略吧

不建议多进程使用,也就是跑多个 cli 命令, 主要原因是 gk cookie 的问题,一个时刻只有一个cookie 起作用,而且还有频率的限制,请求太快会被导致cookie失效重新生成cookie,所以多个进程实际上效率没有单进程的高。 其次,tinydb不管我怎么加锁,多进程如果用同一个 文件还是有问题的。

DasyDong commented 4 years ago

@DasyDong tinydb 的确不支持并发,这个在代码中也体现了。不管是 DataClient 这个内部类,还是对外接口的各个 cli 命令都是线程安全的。 不知道你是在什么使用场景下,需要额外考虑这个问题?

因为我是企业版客户, 会下载所有的课程,单独下载比较慢,所以我是geektime mp4batch 和geektime mp3batch 同时运行,这个场景会遇到报错。但这个报错还不是在命令运行的时候就能发现的, 是通常运行一段时间后才能体现。 既然代码里体现了, 那就忽略吧

不建议多进程使用,也就是跑多个 cli 命令, 主要原因是 gk cookie 的问题,一个时刻只有一个cookie 起作用,而且还有频率的限制,请求太快会被导致cookie失效重新生成cookie,所以多个进程实际上效率没有单进程的高。 其次,tinydb不管我怎么加锁,多进程如果用同一个 文件还是有问题的。

OK, 了解了!