码迷,mamicode.com
首页 > 其他好文 > 详细

7.3.6 - GIL

时间:2018-03-07 00:47:15      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:进程   结果   任务   线程   gif   join   __name__   ima   end   

技术分享图片

技术分享图片

 如果并发的多个任务是计算密集型:多进程效率高

from multiprocessing import Process
from threading import Thread
import os,time
def work():
    res=0
    for i in range(100000000):
        res*=i


if __name__ == __main__:
    l=[]
    print(os.cpu_count()) #本机为4核
    start=time.time()
    for i in range(4):
        # p=Process(target=work) #耗时5s多
        p=Thread(target=work) #耗时18s多
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop=time.time()
    print(run time is %s %(stop-start))
技术分享图片
4
run time is 31.451799154281616
运行结果
from multiprocessing import Process
from threading import Thread
import os,time
def work():
    res=0
    for i in range(100000000):
        res*=i


if __name__ == __main__:
    l=[]
    print(os.cpu_count()) #本机为4核
    start=time.time()
    for i in range(4):
        p=Process(target=work) #耗时15s多
        # p=Thread(target=work) #耗时31s多
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop=time.time()
    print(run time is %s %(stop-start))
技术分享图片
4
run time is 15.402880907058716
运行结果

从上可以看出计算密集型,适合多进程、

 

如果并发的多个任务是I/O密集型:多线程效率高

from multiprocessing import Process
from threading import Thread
import threading
import os,time
def work():
    time.sleep(2)
    # print(‘===>‘)

if __name__ == __main__:
    l=[]
    print(os.cpu_count()) #本机为4核
    start=time.time()
    for i in range(400):
        p=Process(target=work) #耗时41s多,大部分时间耗费在创建进程上
        # p=Thread(target=work) #耗时2s多
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop=time.time()
    print(run time is %s %(stop-start))
技术分享图片
4
run time is 41.38236689567566
运行结果
from multiprocessing import Process
from threading import Thread
import threading
import os,time
def work():
    time.sleep(2)
    # print(‘===>‘)

if __name__ == __main__:
    l=[]
    print(os.cpu_count()) #本机为4核
    start=time.time()
    for i in range(400):
        # p=Process(target=work) #耗时41s多,大部分时间耗费在创建进程上
        p=Thread(target=work) #耗时2s多
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop=time.time()
    print(run time is %s %(stop-start))
技术分享图片
4
run time is 2.046117067337036
运行结果

从上可以看出IO密集型,适合多线程

 

应用:

多线程用于IO密集型,如socket,爬虫,web
多进程用于计算密集型,如金融分析

 

7.3.6 - GIL

标签:进程   结果   任务   线程   gif   join   __name__   ima   end   

原文地址:https://www.cnblogs.com/caimengzhi/p/8519648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!