gevent 实现io自动切换,gevent.join([]), gevent.spawn, 爬虫多并发的实现

gevent 是一个第三方库,可以很容易的实现遇到io(文件传输)操作时,程序自动跳转到下一个程序 

 

例一: 用gevent.sleep()  来模拟io操作 

import gevent

def foo():
print('12')
gevent.sleep(2)
print('34')

def bar():
print('56')
gevent.sleep(1) #休息一秒,模拟遇到IO状况
print('78')

def test1():
print('90')
gevent.sleep(0)
print('100')

gevent.joinall( #添加所有的协程
[ gevent.spawn(foo), #创建一个foo协程
gevent.spawn(bar),
gevent.spawn(test1)

]
)

例二:通过gevent 实现 爬虫的异步多并发,遇到io操作就自动切换

from gevent import monkey
monkey.patch_all() #对程序中的IO操作进行标记

import gevent

from urllib.request import urlopen

def f(url):
resp = urlopen(url)
data = resp.read()
print('%d bytes receive from %s'%(len(data), url))

gevent.joinall([
gevent.spawn(f,'https://www.python.org/'), #gevent.spawn(f,args) 第一个参数是程序名, 第二个参数是传入程序的参数
gevent.spawn(f, 'https://www.yahoo.com/'),
gevent.spawn(f, 'https://github.com/'),
])






转载于:https://www.cnblogs.com/my-love-is-python/p/9164721.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值