gevent 并发实例

简介: gevent 并发实例


gevent实例:

from gevent import monkey
monkey.patch_socket()
import gevent
import gevent.pool
import requests
from bs4 import BeautifulSoup
import time
t1=time.time()
#获得所有教授的链接
web_links='http://www.cmu.edu/engineering/materials/people/faculty/index.html'
l=requests.get(web_links)
li=BeautifulSoup(l.text,'lxml')
li1=li.find('div',class_='bioIndex')
lin=li1.find_all('div',class_='row')
links=[]
for link in lin:
    temp=link.find('div',class_='names').find_all('div',class_='name')
    for i in temp:
        t_link='http://www.cmu.edu/engineering/materials/people/faculty/'+str(i.find('a')['href'])
        links.append(t_link)
#对每个连接进行解析
def gettext(links):
    i = 0
    try:
        pro = requests.get( links ).text
        print('第{}位教授'.format(i) + '#########################################\n',
              '教授链接: ' + (links[i]) + '\n',
              )
        soup = BeautifulSoup(pro, 'lxml')
        detail = soup.find('div', class_='content')
        name = detail.find('h1').text
        title = detail.find('h2')
        contacts = detail.find_all('div', class_='bioContactInfo')
        bio = detail.find('p')
        print('教授姓名: ' + str(name) + '\n',
              'title    ' + title.text + '\n'
              'orginzation'+' Carnegie Mellon University  MECHANICAL ENGINEERING')
        for contact in contacts[1:]:
            print(contact.text)
        print(bio.text)
        i = i + 1
    except Exception as e:
        i = i + 1
        print(e)
#定义并发的数量
pool=gevent.pool.Pool(10)
for i in links:
    pool.add(gevent.spawn(gettext,i))
pool.join()
print("共计{}名学者".format(i))
t2=time.time()
print('用时',t2-t1)


相关文章
一日一技:使用 asyncio 如何限制协程的并发数
一日一技:使用 asyncio 如何限制协程的并发数
946 0
一日一技:使用 asyncio 如何限制协程的并发数
|
3月前
|
监控 安全 Java
一文讲明白Java中线程与进程、并发与并行、同步与异步
一文讲明白Java中线程与进程、并发与并行、同步与异步
26 1
|
3月前
|
存储 Python
python使用gevent库来创建协程,并通过协程实现并发执行不同的任务
```markdown 这段Python代码利用`gevent`库实现并发执行协程。定义了两个打印函数`f1`和`f2`,分别输出"csdn"和"yyds"。代码首先创建列表`t_l`,并启动5个`f1`协程,将其加入列表并等待所有协程完成。随后,同样方式启动5个`f2`协程,存入`t1_l`列表并等待执行完毕。整体展示了`gevent`的协程并发操作。 ```
31 1
|
10月前
|
并行计算 机器人 Python
【python】多进程并发异步调用
【python】多进程并发异步调用
|
Web App开发 数据采集 Java
使用asyncio库和多线程实现高并发的异步IO操作的爬虫
使用asyncio库和多线程实现高并发的异步IO操作的爬虫
|
Java 数据库 芯片
物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
一般情况下,大家对Python原生的并发/并行工作方式:进程、线程和协程的关系与区别都能讲清楚。甚至具体的对象名称、内置方法都可以如数家珍,这显然是极好的,但我们其实都忽略了一个问题,就是具体应用场景,三者的使用目的是一样的,换句话说,使用结果是一样的,都可以提高程序运行的效率,但到底那种场景用那种方式更好一点?
物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
|
安全 调度 开发者
并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
协程与线程向来焦孟不离,但事实上是,线程更被我们所熟知,在Python编程领域,单核同时间内只能有一个线程运行,这并不是什么缺陷,这实际上是符合客观逻辑的,单核处理器本来就没法同时处理两件事情,要同时进行多件事情本来就需要正在运行的让出处理器,然后才能去处理另一件事情,左手画方右手画圆在现实中本来就不成立,只不过这个让出的过程是线程调度器主动抢占的。
并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
多进程的创建
创建成功子进程中返回0,失败返回-1.
|
网络协议 安全 测试技术
协程并发(并行)资源竞争问题 | 学习笔记
快速学习协程并发(并行)资源竞争问题
135 0
协程并发(并行)资源竞争问题 | 学习笔记
协程(三)—— 协程在并发中的优势
这篇文章讲讲协程在并发中的优势,并发是个复杂的过程,内部机制就不说了,不太懂也说不好,我们来讲讲处理并发的方法就行。
249 0