2 luoyanhanhan luoyanhanhan 于 2016.09.13 10:00 提问

新手gevent某API用途问题
# -*- coding:utf-8 -*-
import gevent
from gevent import monkey, Greenlet
monkey.patch_all()
from gevent.pool import Pool
import requests
p = Pool(2)#设置并发数为2

def down(url):
    print url+' '+str(len(requests.get(url).content))

urls = ['http://www.baidu.com','http://www.163.com/']
urls2=['http://www.qq.com','http://www.ifeng.com/','http://www.sina.com.cn','http://www.sohu.com/']

for url in urls:
    p.spawn(down, url)

print 'size of pool is %s'%len(p)
p.join()
def buildurl():
    for i in urls2:
        gevent.sleep(0)
        p.spawn(down,str(i))
        print 'size of pool is %s'%len(p)

p.spawn(buildurl)

loop = gevent.core.loop()
loop.run()

个人结合网上思路实现的动态添加任务的代码,但是不明白最后两句gevent.core.loop().run()作用是什么?

1个回答

oyljerry
oyljerry   Ds   Rxr 2016.09.13 23:08

就是让所有的协程都在loop中开始调度 需要有run来一直处理

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Gevent简介
介绍 gevent 是一个python网络框架,对应Java的netty框架,使用greenlet提供异步API,基于libevent ,它为各种并发和网络相关的任务提供了整洁的API. 快速基于libevent的event loop基于greenlet的轻量级执行单元重用python标准api(event,queue)协同的socket和ssl模块使用标准库和第三方模块写标准阻塞so
gevent基础之阻塞与非阻塞详解
gevent中一个很大的改进就是将阻塞IO改为非阻塞IO,比如gevent.socket.patch就是将项目中阻塞socket变为非阻塞,因此深刻理解网络IO部分阻塞/非阻塞十分重要。 1.阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回 1)connect阻塞    2)接收数据阻塞 2.非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会
python Gevent – 高性能的Python并发框架
在python里,按照官方解释greenlet是轻量级的并行编程,而gevent呢,就是利用greenlet实现的基于协程的python的网络library,好了,关系理清了。。。 协程,gevent,greenlet,eventlet 不了解的可以上网查找资料了解下。至于 协程,进程和线程大家平时了解的都比较多,而协程算是一种轻量级进程,但又不能叫进程,因为操作系统并不知道它的存在。什么意思呢,就是说,协程像是一种在程序级别来模拟系统级别的进程,由于是单进程,并且少了上下文切换,于是相对来说系统消耗很少,
gevent开发指南
由Gevent社区编写 gevent是一个基于libev的并发库。它为各种并发和网络相关的任务提供了整洁的API。
flask笔记:11:gunicorn+gevent+nginx+flask部署,使用siege进行服务器压力测试
环境是macos sierra 10.12.3 python3.5 先安装nginx 官网下载http://nginx.org/en/download.html 安装,解压tar.gz文件 Linux 下 权限chmod a+rwx * ./configure --without-http_rewrite_module make && make install 启动
gevent超时及返回值获取
最近在做爬虫使用requests, 爬虫常常在运行一段时间后假死.  而且使用原生协程编写感觉语法也很不方便.  于是翻阅了一些相关文章API之类的.  最后做了如下处理来处理. 大致测试代码如下 import gevent import time import random def setter(i): sl = random.randint(1, 10) gevent
gevent管理socket时容易忽略的错误
使用python的协程库gevent管理socket通信的时候出现了下列错误: raise _socketcommon.ConcurrentObjectUseError('This socket is already used by anothergreenlet: %r' % (watcher.callback, )) gevent.hub.ConcurrentObjectUseErro
Flask+gevent 异步 WEB 架构
异步 WEB 架构的特点: gevent 为 Python 提供了比较完善的协程支持,其基于 greenlet 实现协程。 当 greenlet 遇到如网络访问、磁盘 IO 等操作时,就将自动切换至其他的 greenlet,待操作完成后,在适合的时间点回切 greenlet 继续执行。由于网络访问、磁盘 IO 等操作耗时较长,且实际 CPU 使用率较低(大部分工作由 DMA 等设备完成)。所以
python中gevent monkey_patch 出现Monkey-patching may lead to errors解决
       在使用多进程加协程时,patch_all()后出现警告信息:MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError。有时会导致不能正常使用requests或者其他包,其实只要调整import的顺序即可...
基于gevent和pymysql实现mysql读写的异步非堵塞方案
http://rfyiamcool.blog.51cto.com/1030776/1338174/ 咱们经常使用的mysql库,MySQL-Python库是用C写的,很遗憾它是阻塞的,要实现异步的MySQL驱动必须用Python版本的MySQL驱动!  现在社区里面有两个纯python实现的mysql驱动。一个是 myconnpy  另一个是PyMysql ~ 这两个mysql