协程框架

import requests
import gevent
from gevent import monkey

monkey.patch_all()

headers = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

def download(url):
    print("start:",url)
    content = requests.get(url, headers=headers).content
    gevent.sleep(1)
    print(len(content), url)
    pass    

def main():
    gevent.joinall([
        gevent.spawn(download, "http://www.baidu.com"),
        gevent.spawn(download, "http://www.bilibili.com"),
        gevent.spawn(download, "http://www.163.com"),
        gevent.spawn(download, "http://www.sina.com"),
    ])

if __name__ == "__main__":
    main()

原文地址:https://www.cnblogs.com/zxfei/p/12130889.html

时间: 2024-11-13 07:59:33

协程框架的相关文章

Java协程框架--Kilim常见问题解答

1.Kilim中的Task,即用户线程如何调度和切换? 在多任务的调度上操作系统存在抢占式和协作式两种方式,相比传统的Thread多线程间抢占式调度,Kilim中的Task采用的是协作式调度,即由Task本身负责释放和恢复占用CPU. 2.Kilim如何识别代码中哪些方法是Pauseable,可暂停的? 通过Kilim提供的Weaver工具在代码编译后,对编译生成的字节码进行分析,识别哪些方法抛出Pauseable异常的,来判断识别方法可暂停的. 3.Kilim是如何实现线程执行过程中Task的

魅族C++协程框架(Kiev)技术内幕

Kiev框架简介 kiev是魅族科技推送平台目前使用的Linux-C++后台开发框架.从2012年立项起,先后由多位魅族资深架构师.资深C++工程师倾力打造,到本文写就的时间为止,已经在推送平台这个千万用户级的大型分布式系统上经历了近5年的考验.如今Kiev在魅族推送平台中,每天为上百个服务完成数百亿次RPC调用. kiev作为一套完整的开发框架,是专为大型分布式系统后台打造的C++开发框架,由以下几个组件组成: RPC框架(TCP/UDP) FastCGI框架 redis客户端(基于hired

Java协程框架-Kilim字节码剖析

前面几篇文章从代码层面介绍了Kilim的基本原理,但是对于其中的一些细节,比如Task的执行状态如何管理等问题从代码上依然得不到答案,本文即再深入到字节码层面来解答. 1.  Kilim字节码改写前后的代码有什么区别? 这里还是先上Kilim官方文档中的一张图,这张图清晰的展现出原始的代码与经Kilim改写后的协程代码. 可以看出左边的原始代码,与我们常见的函数相比有所不同,这里显示声明抛出Pausable异常.实际上这个异常在运行期间不会抛出,它的实际作用类似于注解,使得Kilim能够识别哪些

网络IO解决方案 — 协程框架的实现

协程这个概念很久了,好多程序员是实现过这个组件的,网上关于协程的文章,博客,论坛都是汗牛充栋,在知乎,github上面也有很多大牛写了关于协程的心得体会.突发奇想,我也来实现一个这样的组件,并测试了一下性能.借鉴了很多大牛的思想,阅读了很多大牛的代码.于是把整个思考过程写下来.实现代码 https://github.com/wangbojing/NtyCo 代码简单易读,如果在你的项目中,NtyCo能够为你解决些许工程问题,那就荣幸之至. 下面将部分的NtyCo的代码贴出来. NtyCo 支持多

[记录]python的简单协程框架(回调+时间循环+select)

# -*- coding: utf-8 -*- # @Time : 2018/12/15 18:55 # @File : coroutine.py #一个简单的 Coroutine 框架 import socket # on top of TCP import time from selectors import DefaultSelector, EVENT_WRITE, EVENT_READ # select: System Call -----> watch the readiness of

Java协程框架--Kilim框架Fiber浅析

1. Kilim中Fiber的作用 Fiber主要作用用来管理和保存Task执行过程中调用层次中的函数栈帧的状态,这里的函数栈帧与JVM运行时中的函数栈帧是相同含义,但是Fiber不会将函数栈帧中的全部信息原封不动的镜像拷贝一份,比如局部变量表中的所有变量,而是经过代码分析之后有选择的暂存有必要保留的变量,一般只需要保存后续执行流程中需要用到的变量,例如静态常量等就无需保存到Fiber中,因为静态变量可以直接通过iconst之类的字节码直接加载到操作数栈. 2. Kilim中Fiber中的pc的

【PHP】PHP 微服务协程框架Swoft

原文地址:https://www.cnblogs.com/songgj/p/8684320.html

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

从无到有实现.net协程(一)

协程的概念,就我而言,来源自当初学习Go,它可以用一句话来总结,"单线程无阻塞异步处理",也就是说,首先,它的范围是针对单个线程来说的,一个线程可以运行多个代码片段,当运行期间遇到IO等待(包括网络IO.磁盘IO等,常见的数据库操作.web服务调用都属于IO等待)时,自动切换到其他代码片段上执行,当执行完毕或再次遇到IO等待时,再回到之前已经完成IO等待的代码片段继续执行,这样,就保证了线程无阻塞,并且多个片段都能被逐步处理(前提是代码中存在IO等待,否则还是顺序处理),以上就是协程的