zoukankan      html  css  js  c++  java
  • 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/'),
    ])






  • 相关阅读:
    48. 旋转图像(顺时针)
    560. 和为K的子数组
    75. 颜色分类(三指针移动||计数排序)
    670. 最大交换
    常见端口号汇总
    springboot解决跨域问题跨域
    jad使用
    tomcat9:解决tomcat catalina log和localhost log中文乱码
    JUC:阻塞队列
    JUC:读写锁
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9164721.html
Copyright © 2011-2022 走看看