python gevent协程学习

import gevent
from gevent import monkey
import redis
import requests
import time
import flask
from flask import Flask
from gevent.pywsgi import WSGIServer


app = Flask(__name__)

# 打开猴子补丁,使得gevent能够在IO操作时切换任务
monkey.patch_all()

def task1():
    print("start task1")
    gevent.sleep(2)
    return "task1"

def task2():
    print("start task2")
    gevent.sleep(9)
    return "task2"

def task3(i):
    t1 = time.time()
    requests.get("http://localhost:" + str(i))
    t2 = time.time()
    return "task" + str(i) + "\t" + str(t2-t1)

def task4():
    print("start task4")
    jobs = []
    for i in [8092, 8093]:
        job = gevent.spawn(task3, i)
        jobs.append(job)
    results = gevent.joinall(jobs, timeout=2.8)

    for result in results:
        print(result.get())
    return "task4"


def main():
    # 创建协程列表
    tasks = [gevent.spawn(task1), gevent.spawn(task2), gevent.spawn(task4)]

    # 等待任务完成,设置超时时间为200ms
    #results = gevent.joinall(tasks, timeout=3)

    # 获取结果
    #results = [task.value for task in tasks if task.successful()]

    #for result in tasks:
    #    print("result\t" + result.get())

@app.route("/")
def index():
    with gevent.Timeout(1, False):
        #gevent.sleep(2)
        time.sleep(2)
    main()
    current_greenlet = gevent.getcurrent()
    print(current_greenlet)

    return "123"

if __name__ == "__main__":
    http_server = WSGIServer(('0.0.0.0', 12345), app, log=None)
    http_server.serve_forever()


  1. 这里可以看flask如何使用协程并发;
  2. 这里看协程如何超时熔断
    3
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值