Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

并发支持? #9

Open
TwinklerG opened this issue Feb 15, 2025 · 2 comments
Open

并发支持? #9

TwinklerG opened this issue Feb 15, 2025 · 2 comments
Labels
enhancement New feature or request

Comments

@TwinklerG
Copy link

首先感谢学长的无私开源

我高强度使用这个脚本,但发现下载速度似乎有点慢

我自己基于这个版本重写了一个Rust并发版本,下载速度极大提升

是否需要使用joblib等库为本项目提供并发版本?

Pros:

  • 下载速度极大提升

Cons:

  • 控制台输出基本失效

想问问学长对于并发的想法

@EricZhu-42
Copy link
Owner

同学你好,

首先,感谢你的反馈!很高兴看到现在还有人在使用这段代码,以及这段代码竟然还能正常运行。

我曾经考虑过并发下载的功能,但最后没有实装,主要是为了防止并发对教学立方的服务器造成过大压力。疫情期间,南大的绝大多数课程都使用教学立方来分发课件、作业及课堂录像。不过,教学立方现在(可能)已经不那么常用了,如果有同学有并发下载的需求,我也很乐意提供支持。

如果你有兴趣在我先前 Python 代码的基础上增加并发下载的功能,欢迎发起 PR;如果你想维护 Rust 版本,也欢迎另开一个 Repo,我会在该项目主页标明。由于可能很多人没有 Rust 运行环境,建议以 Windows/Mac/Linux 各平台可执行文件的形式分发。

关于你提到的 Python 并发及日志相关问题,一些建议如下:

  1. joblib 以多进程并发为主。如果是并发下载,线程级并发已经足够,例如 ThreadPoolExecutor 就非常方便。
  2. 多线程环境下,tqdm 等常见进度条库一般也可以使用(例如,tqdm.tqdmpositon 参数支持同时显示多个进度条)。如果不希望引入过多的第三方依赖,直接通过 print 定期(例如每 5s)显示简单的进度报告似乎也已经足够。

@EricZhu-42 EricZhu-42 added the enhancement New feature or request label Feb 15, 2025
@TwinklerG
Copy link
Author

感谢学长耐心细致的答复。

我已经开了一个repo维护Rust版本。囿于能力所限,我做得基本是复现工作,甚至用到学长代码中的注释。如果实现有问题,欢迎学长发issue或PR进行斧正。

我的Python和Rust能力都很一般,对Pypi第三方库的了解也不多。后续我将进行进一步了解学习,尝试对Python版本增加多线程下载功能,发起PR。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants