
1 pagxir 2016 年 9 月 16 日 via Android 需要做子线程的 join/detach 。 |
2 wizardforcel 2016 年 9 月 16 日 via Android 如果不需要控制子线程,创建之后应该立即 detach 。 |
3 longchisihai OP @wizardforcel threading 模块没有 detach 方法呀,怎么 detach 呢? |
4 raysonx 2016 年 9 月 16 日 via iPad 我从另外的角度谈一谈这个问题。 1.理想的方式是子线程完成任务后主动退出,如果子线程工作期间被不明真相的主线程强制杀死,可能会产生无法预知的行为。 2.主线程不断创建子线程不是一个好的策略,因为机器的硬件资源有限,同时创建大量线程反而降低运行效率。建议维护一份任务队列和线程池,由线程池中的线程从任务队列取任务。 3.你的主线程要能保证不能创建重复任务。 |
5 raysonx 2016 年 9 月 16 日 via iPad detach 线程通常只是为了让线程退出后资源会被自动回收。 如果你不加节制地创建线程的话,问题依然不会得到解决。 |
6 raysonx 2016 年 9 月 16 日 via iPad 再一个题外话,如果程序跑在 Linux 上,还可以尝试用 dnotify 和 inotify 让内核主动告知文件系统变化,避免用循环手动扫描 |
7 wangxiaoer 2016 年 9 月 16 日 你这完全是 XY problem( http://mywiki.wooledge.org/XyProblem) . @raysonx 已经提到了,合理的做法是子进程自己根据某些 flag 控制进程是否结束,并且有责任在退出前释放自己占用的资源 |
8 Knights 2016 年 9 月 16 日 via iPad 如果主线程可以阻塞的话就在主线程里移动文件吧,不能阻塞的话试试异步。 |
9 techmoe 2016 年 9 月 16 日 via Android 4 楼正解,感觉这个逻辑设计的有缺陷 可以考虑像一些下载器一样设置最大同时删除(下载)数这种功能 |
10 davy1995 2016 年 9 月 16 日 via Android 线程池? |
11 missdeer 2016 年 9 月 16 日 4 楼正解 子线程为什么不自己结束退出? 频繁创建新的线程不如用线程池。 |
12 longchisihai OP 感谢大家的回复! |
13 reus 2016 年 9 月 16 日 用 go ,监视文件夹、并行移动、限制并行数量都有了 https://gist.github.com/reusee/cc61fbbcd9229a89ad01cbb6ed97987e |
14 alqaz 2016 年 9 月 16 日 via Android 发信号 |
15 wizardforcel 2016 年 9 月 16 日 不如这样,创建固定数量的线程,并使用 threading 模块的 queue ,主线程扫描文件之后存进 queue 里面,子线程循环读取 queue ,如果没有内容就 sleep ,有内容就处理。 |
16 8bit 2016 年 9 月 17 日 这不是生产者与消费者问题吗? |