弱极了,请教 Python 多线程如何快速开始

330 天前
 pathetique
文科轻拍

晚上用 python 写雍正实录的词汇统计

雍正的起居官特别能写,一百三十多万字,用 M1 pro 的电脑,半个小时才检索到三万多字(算法应该没问题),看了看 cpu ,只有一个 100%的占用

有没有特别简单的 python 多线程调用入门,希望自己能理解的那种?

不知道问清楚没有
3926 次点击
所在节点    Python
53 条回复
noneusername
330 天前
边看文档,边让 GPT 输出示例测试
ysc3839
330 天前
CPU 密集运算用 Python 的多线程是没用的,需要多进程
这种情况手动分段然后开多几个同时跑就好了
Weixiao0725
330 天前
看一下 multiprocessing.Pool
suith27
330 天前
shalingye
330 天前
你需要的是多进程,简单得很,这是我的模板:
if __name__=='__main__':
from multiprocessing import Pool # 导入进程池
path=choosefolder()
p = Pool() # 创建进程池,留空代表 Cpu 的逻辑内核数目
while True:
try:
for n in range(1,1000):
p.apply_async(download, args=(n,path)) # 向进程池中添加任务
except:
p.close() # 结束向进程池中添加任务(后续不能再使用 apply_async 方法添加新任务)
p.join() # 实现进程同步
break
shalingye
330 天前
缩进寄了,自己排吧,choosefolder 和 download 都是函数名,args 代表 download 函数的参数,如果只有一个参数需要写成 n,的形式,把你需要分割处理的函数替换到 download 的位置
fyq
330 天前
如果只有一个文档的话,最简单的方法是手动拆分成好几个,然后同时针对拆分后不同的的文档运行你的程序去分析,时候再针对得到的结果汇总一下就好了。
liyafe1997
330 天前
Python 的多线程是假的,忘了这东西吧,要干正事得看多进程 multiprocessing.Pool
lovelylain
330 天前
python 有个著名的 GIL 锁,执行 Python 代码时都需要先获取这个锁,所以虽然多线程,但同一时间只有一个线程获得这个锁,其他线程都在等待,结果只能跑满一个核。如果你是 c 模块处理,可以手动释放锁处理完再获取,这样多线程就能突破单核限制。但 c 模块开发效率和可移植性很差,更好的方案是上面提到的 multiprocessing 多进程。
tulongtou
330 天前
卧槽,现在文科生都这么优秀了么,卷到理科生这边来了
litguy
330 天前
多进程,每个进程处理其中的一部分东西,最后所有进程结果汇总
strawberrydafu
330 天前
检索具体是在干什么?半小时才 3 万字我怀疑算法本身有很多优化空间
Kinnice
330 天前
词汇统计,m1 ,半小时 3w 字,看起来算法不像是没有问题
ohayoo
330 天前
其实可以用第三方的任务队列库,自带多进程多线程选项,只需要关注自己的逻辑函数即可,都可以尝试对比下
adoni
330 天前
参见: https://adoni.github.io/2019/01/07/python-practice/#concurrent-and-multi-process

```python
from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor(max_workers=16) as exe:
result = exe.map(func, data_list)
```

另外,你可以直接改成单线程,看一下,我感觉 130 万字,分分钟跑完。
aijam
330 天前
"半个小时才检索到三万多字",这得多慢啊,口算可能都比这个快
coderluan
330 天前
这个你问 chatgpt 更方便,最简单应该是 concurrent.futures.ThreadPoolExecutor ,然后用 subprocess 调用你的程序开多进程。
killva4624
330 天前
多进程记得考虑进程安全
laqow
330 天前
会不会算法其实有问题?至少 python 原生的文件 IO 和字符串处理慢的一匹,直接把所有文字 read 进内存再处理,或者以二进制读取后在 byte 对象上搜索都能快出个十倍来
iX8NEGGn
330 天前
半小时三万多字,算法肯定有问题。百万字算法合适的话也,词频统计也就几十秒

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/945072

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX