flask效率

文章目录

  • 一、flask效率
    • 1. python中提高性能
    • 2. 利用生成器yield实现携程(work1和work2进行切换)
    • greenlet(封装的yield)
    • 3. gevent(封装的greenlet)
    • 4. 猴子补丁(monkey)
    • 5. flask效率

一、flask效率


提升flask的效率

flask 默认支持 多线程的的服务器操作
flask效率_第1张图片


1. python中提高性能


  • 进程
	fork

	process  

	multiprocessing
  • 线程
	thread

	threading
  • 协程
python一种提升效率的手段,消耗小,由人为控制切换,利用线程执行中的耗时操作时间,去做别的事情

2. 利用生成器yield实现携程(work1和work2进行切换)


import time
def work1():
    while True:
        print ("work1")
        yield 1
        time.sleep(1)
def work2():
    while True:
        print ("work2")
        yield 1
        time.sleep(1)
def main():
    w1 = work1()
    w2 = work2()
    while True:
        next(w1)
        next(w2)
if __name__ == '__main__':
    main()


greenlet(封装的yield)


Python可以使用yield快速生成协程,但是不稳定,因此封装了 yield为greenlet,使得切换任务变得更加简单

pip install greenlet

from greenlet import greenlet
import time
def work1():
    while True:
        print ("work1")
        w2.switch()
        time.sleep(1)
def work2():
    while True:
        print ("work2")
        w1.switch()
        time.sleep(10)

if __name__ == '__main__':
    w1 = greenlet(work1)   ### 创建了一个greenlet 对象
    w2 = greenlet(work2)  ### 创建了一个greenlet 对象
    w1.switch()

greenlet 依然需要手动添加进行任务的切换


3. gevent(封装的greenlet)


gevent 封装了greenlet
genvet 网络异步的并发库
pip install gevent

import gevent

import time
def work1():
    for i in range(10):
        print ("work1 %d" %i)
        # time.sleep(1)    ### 模拟耗时操作
        ###   IO密集型   耗时操作
        gevent.sleep(1)

def work2():
    for i in range (10):
        print ("work2 %d " %i)
        # time.sleep(1)
        gevent.sleep(1)


w1 = gevent.spawn(work1)   ##  创建一个 gevent对象  (参数:要执行的方法)
w2 = gevent.spawn(work2)

w1.join()  ## 等待  w1  执行结束
w2.join()  ## 等待  w2 执行结束

此时必须要通过gevent自带的 gevent.sleep(1)属性才能实现切换


4. 猴子补丁(monkey)


作用:将代码中所有的耗时操作,识别,自动转化为 gevent.sleep()

import gevent
from gevent import monkey
monkey.patch_all()   ## 识别耗时操作,并转化
import time
def work1():
    for i in range(10):
        print ("work1 %d" %i)
        time.sleep(1)    ### 模拟耗时操作


def work2():
    for i in range (10):
        print ("work2 %d " %i)
        time.sleep(1)

gevent.joinall([
	gevent.spawn(work1),
	gevent.spawn(work2)
])

5. flask效率


flask效率_第2张图片


你可能感兴趣的:(#,python,web框架之flask)