也同时增大对内存分配的难度
如果您要查看本帖隐藏内容请 回复
看看
6666666666666666
学习
就是来学习线程,和进程的,,还没迷糊
66666666666666666666
正好要学这个
看看
本帖最后由 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))
{:5_97:}
payton24 发表于 2018-2-9 17:45
这有点误导观众啊,不能说哪种运行得快就叫多线程啊,支持前面几位的说法。多线程本来就是并发的,在爬 ...
并没有误导啊,其实多线程对于CPU的利用率和单线程的利用率是一样的,但是由于多线程可以并发执行,所以对于频繁读取或者写入操作(文件下载),或者网络请求等待(爬虫)这些操作,多线程是有优势的。
但是对于计算密集型操作(比如大量数据的计算)多线程就和单线程几乎是一样的效率了,这时候就可以利用多进程来处理,多进程是利用多核CPU进行并行计算,所以对CPU的利用会高得多。
学习一下
这个是在linux还是在win下跑的结果啊。linux的进程线程和win的不同吧
因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。
Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。
按时地方官艰苦奋斗时代感就
{:10_277:}
鍥炲
回复
学习