gevent 实现io自动切换,gevent.join([]), gevent.spawn, 爬虫多并发的实现
Posted my-love-is-python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/‘),
])
以上是关于gevent 实现io自动切换,gevent.join([]), gevent.spawn, 爬虫多并发的实现的主要内容,如果未能解决你的问题,请参考以下文章