最近在写一个 python 多线程读取数据库的程序,只是不知道为什么 python 的多线程和单线程没多大区别,效率也没有提高,而且执行方向也是和单线程一样,请问这是什么问题呢,我用了 threading,自带的 thread 还有 map, 都没用。
最近在写一个 python 多线程读取数据库的程序,只是不知道为什么 python 的多线程和单线程没多大区别,效率也没有提高,而且执行方向也是和单线程一样,请问这是什么问题呢,我用了 threading,自带的 thread 还有 map, 都没用。
赞同 @richardzhiming
读写数据库主要也在 I/O,大部分时间都在等待 I/O,CPU 的占用时间很少。
线程池推荐一个包 concurrent.futures
,Python 3.2 成了标准库。
我去,无意间看到了其他人的答案,感觉很受伤啊,貌似 Python 有了 GIL,多线程就是个废物了,有条件要多反对几次才行。。。
如果是无需同步的事务,强烈推荐使用multiprocessing和multiprocessing.dummy这两个库,分别是多进程和多线程的实现,只需写好事务函数扔到pool.map中,线程分配完全不用自己操心。
1 回答9.6k 阅读✓ 已解决
2 回答5.2k 阅读✓ 已解决
2 回答3.6k 阅读✓ 已解决
3 回答4.5k 阅读
2 回答1.6k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
Python有个GIL这个东西,导致程序每个时候只能有一个线程在运行,所以多线程可能反而会慢,你需要多进程。
编辑补充 @Guangyu 的答案,题主可以考虑用 2.6 引入的 multiprocessing 多进程包