鱼C论坛

 找回密码
 立即注册
楼主: jerryxjr1220

[作品展示] Python下单线程、多线程、多进程效率比较

[复制链接]
发表于 2017-5-12 16:36:56 From FishC Mobile | 显示全部楼层
也同时增大对内存分配的难度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-23 19:58:06 | 显示全部楼层
如果您要查看本帖隐藏内容请 回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-25 11:51:55 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-26 08:39:22 | 显示全部楼层
6666666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-31 18:22:10 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-31 20:15:52 | 显示全部楼层
就是来学习线程,和进程的,,还没迷糊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 12:31:16 | 显示全部楼层
66666666666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 12:32:14 | 显示全部楼层
正好要学这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 17:29:29 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-9 17:45:59 | 显示全部楼层
本帖最后由 payton24 于 2018-2-9 17:57 编辑
jerryxjr1220 发表于 2017-4-17 12:58
4999999950000000
Multi Threading: Time used: 16.073000 sec


这有点误导观众啊,不能说哪种运行得快就叫多线程啊,支持前面几位的说法。多线程本来就是并发的,在爬虫中运用还是不错的。

最后补充一下,我运行代码的结果为,比单线程还是快那么一点点,可能是现在的编译器优化了吧,用的是python3.6:
4999999950000000
Multi Threading: Time used: 7.622436 sec

代码为:
# Multi Threading
import time
import threading as td

time_start = time.time()

def calc(st, ed):
    global global_list
    tmp = 0
    for i in range(st, ed):
        tmp += i
    global_list.append(tmp)

global_list = []
t1 = td.Thread(target=calc, args=(0, 25000000))
t2 = td.Thread(target=calc, args=(25000000, 50000000))
t3 = td.Thread(target=calc, args=(50000000, 75000000))
t4 = td.Thread(target=calc, args=(75000000, 100000000))
threads = [t1, t2, t3, t4]

for t in threads:
    t.start()
for t in threads:
    t.join()
print (sum(global_list))
time_stop = time.time()
print ('Multi Threading: Time used: %.6f sec' % (time_stop - time_start))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 10:21:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-5 10:52:14 | 显示全部楼层
payton24 发表于 2018-2-9 17:45
这有点误导观众啊,不能说哪种运行得快就叫多线程啊,支持前面几位的说法。多线程本来就是并发的,在爬 ...

并没有误导啊,其实多线程对于CPU的利用率和单线程的利用率是一样的,但是由于多线程可以并发执行,所以对于频繁读取或者写入操作(文件下载),或者网络请求等待(爬虫)这些操作,多线程是有优势的。
但是对于计算密集型操作(比如大量数据的计算)多线程就和单线程几乎是一样的效率了,这时候就可以利用多进程来处理,多进程是利用多核CPU进行并行计算,所以对CPU的利用会高得多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 17:08:53 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 17:19:12 | 显示全部楼层
这个是在linux还是在win下跑的结果啊。linux的进程线程和win的不同吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 17:52:43 | 显示全部楼层
因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。
Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 20:41:57 | 显示全部楼层
按时地方官艰苦奋斗时代感就
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 21:09:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-14 21:06:13 | 显示全部楼层
鍥炲
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 21:32:20 | 显示全部楼层
回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-14 21:55:22 From FishC Mobile | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 15:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表