当回首遇上转身 发表于 2017-5-12 16:36:56

也同时增大对内存分配的难度

huabanyu 发表于 2017-12-23 19:58:06

如果您要查看本帖隐藏内容请 回复

鱼油9527 发表于 2017-12-25 11:51:55

看看

Luos 发表于 2017-12-26 08:39:22

6666666666666666

°蓝鲤歌蓝 发表于 2017-12-31 18:22:10

学习

cats_miao 发表于 2018-1-31 20:15:52

就是来学习线程,和进程的,,还没迷糊

3140056787 发表于 2018-2-8 12:31:16

66666666666666666666

showen168 发表于 2018-2-9 12:32:14

正好要学这个

payton24 发表于 2018-2-9 17:29:29

看看

payton24 发表于 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 =

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))

小明吖 发表于 2018-3-5 10:21:45

{:5_97:}

jerryxjr1220 发表于 2018-3-5 10:52:14

payton24 发表于 2018-2-9 17:45
这有点误导观众啊,不能说哪种运行得快就叫多线程啊,支持前面几位的说法。多线程本来就是并发的,在爬 ...

并没有误导啊,其实多线程对于CPU的利用率和单线程的利用率是一样的,但是由于多线程可以并发执行,所以对于频繁读取或者写入操作(文件下载),或者网络请求等待(爬虫)这些操作,多线程是有优势的。
但是对于计算密集型操作(比如大量数据的计算)多线程就和单线程几乎是一样的效率了,这时候就可以利用多进程来处理,多进程是利用多核CPU进行并行计算,所以对CPU的利用会高得多。

水泥工艺学 发表于 2018-4-10 17:08:53

学习一下

colinshi 发表于 2018-4-10 17:19:12

这个是在linux还是在win下跑的结果啊。linux的进程线程和win的不同吧

colinshi 发表于 2018-4-10 17:52:43

因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。
Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

sdtfll 发表于 2018-4-10 20:41:57

按时地方官艰苦奋斗时代感就

瓦蓝 发表于 2018-4-10 21:09:41

{:10_277:}

hko 发表于 2018-4-14 21:06:13

鍥炲

ABC23 发表于 2018-4-14 21:32:20

回复

Kira 发表于 2018-4-14 21:55:22

学习
页: 1 [2] 3 4
查看完整版本: Python下单线程、多线程、多进程效率比较