python3 gevent模块(遇到IO自动切换)

# -*- coding: utf-8 -*-
from gevent import monkey;monkey.patch_all()  # 记住一定放在第一行,这里是打补丁的意思
import gevent
import time

def eat(name):
    print("%s eat first" % name)
    time.sleep(3)
    print("%s eat second" % name)

def play(name):
    print("%s play phone 1" % name)
    time.sleep(2)
    print("%s play phone 2" % name)

g1 = gevent.spawn(eat, "lily")
g2 = gevent.spawn(play, name="lily")
g1.join()
g2.join()

# lily eat first
# lily play phone 1
# lily play phone 2
# lily eat second

爬取网页

# -*- coding: utf-8 -*-
import time
import requests

def get_page(url):
    response = requests.get(url)
    print(url)
    if response.status_code == 200:
        print(response.text)

start_time = time.time()
get_page("https://www.python.org")
get_page("https://www.yahoo.com")
get_page("https://github.com")
print("执行时间:%s" % (time.time()-start_time))

# 执行时间:49.088807821273804

使用gevent模块爬取网页

# -*- coding: utf-8 -*-
from gevent import monkey;monkey.patch_all()
import gevent
import time
import requests

def get_page(url):
    response = requests.get(url)
    print(url)
    if response.status_code == 200:
        print(response.text)

start_time = time.time()
g1 = gevent.spawn(get_page, "https://www.python.org")
g2 = gevent.spawn(get_page, "https://www.yahoo.com")
g3 = gevent.spawn(get_page, "https://github.com")
gevent.joinall([g1, g2, g3])
print("执行时间:%s" % (time.time()-start_time))

# 执行时间:29.85470747947693

原文地址:https://www.cnblogs.com/lilyxiaoyy/p/11037401.html

时间: 2024-08-30 17:27:10

python3 gevent模块(遇到IO自动切换)的相关文章

gevent异步,io自动切换

#!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/19 # # from gevent import monkey  # 这俩行必须放在首行,下面就可以使用time(非gevent)的io# # monkey.patch_all()  # 相当于把所有的io操作打了标记,把io阻塞操作变成了非阻塞操作# # gevent遇到io都可以自动切换# import gevent# import time### def eat(name):#

python协程io自动切换--gevent

1.gevent执行 import gevent def func1(): print('func1 start') gevent.sleep(2) print('func1 end') def func2(): print('func2 start') gevent.sleep(1) print('func2 end') def func3(): print('func3 start') gevent.sleep(0) print('func3 end') if __name__=='__ma

协程:gevent模块,遇到i/o自动切换任务 038

协程 : gevent模块,遇到io自动切换任务 from gevent import monkey;monkey.patch_all() # 写在最上面 这样后面的所有阻塞就全部能够识别了 import gevent # 直接导入即可 from threading import current_thread import time def eat(name): print('%seat1'% name) # gevent.sleep(2) time.sleep(2) # 加上monkey就能

线程池+协程+gevent模块

提交任务的两种方式: 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的 异步调用:提交完一个任务之后,不在原地等待,而是直接执行下一行代码,会导致任务是并发执行的 p.shutdown(wait=True)关闭进程池的入口,并且在原地等待进程池内所有任务运行完毕 异步调用:提交完一个任务之后,不在原地等待,而是直接执行下一行代码,会导致任务是并发执行的,结果:futrue对象会在任务运行完毕后自动传给回调函数 在线程下实现

python 并发编程 协程 gevent模块

一 gevent模块 gevent应用场景: 单线程下,多个任务,io密集型程序 安装 pip3 install gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程. Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度. gevent可以检测io,实现遇到io自动切换另外一个任务 #用法 g1=gevent.spawn(func,1,

python-gevent模块(自动切换io的协程)

import gevent def foo(): print("Running in foo") gevent.sleep(2) print("Explicit context switch to foo again") def bar(): print("Explicit context to bar") gevent.sleep(1 ) print("Implicit context switch back to bar"

Python3之greenlet&gevent模块

一.greenlet模块 简单实现单线程内的任务切换: 1: import greenlet 2: def eat(name): 3: print("%s eat 1" % name) 4: # 第二步 5: g2.switch("egon") 6: print("%s eat 2" % name) 7: # 第四步 8: g2.switch() 9: def play(name): 10: print("%s play 1"

17、第七周-网络编程 - 协程概念介绍、协程gevent模块并发爬网页

协程,又称微线程,纤程.什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置. 协程的好处: 无需线程上下文切换的开销 无需原子操作锁定及同步的开销(注解:"原子操作(atomic operation)是不需要synchr

(并发编程)进程池线程池--提交任务的2种方式、协程--yield greenlet,gevent模块

一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用"池":池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO密集型 #提交任务的两种方式:    # 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的    # 异步调用:提交完一个任务之后,不在原地等待,结果???,而是