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 如何限制协程的并发数
1074 0
一日一技:使用 asyncio 如何限制协程的并发数
|
8月前
|
Java 测试技术 Python
Python的多线程允许在同一进程中并发执行任务
【5月更文挑战第17天】Python的多线程允许在同一进程中并发执行任务。示例1展示了创建5个线程打印"Hello World",每个线程调用同一函数并使用`join()`等待所有线程完成。示例2使用`ThreadPoolExecutor`下载网页,创建线程池处理多个URL,打印出每个网页的大小。Python多线程还可用于线程间通信和同步,如使用Queue和Lock。
87 1
|
8月前
|
存储 Python
python使用gevent库来创建协程,并通过协程实现并发执行不同的任务
```markdown 这段Python代码利用`gevent`库实现并发执行协程。定义了两个打印函数`f1`和`f2`,分别输出"csdn"和"yyds"。代码首先创建列表`t_l`,并启动5个`f1`协程,将其加入列表并等待所有协程完成。随后,同样方式启动5个`f2`协程,存入`t1_l`列表并等待执行完毕。整体展示了`gevent`的协程并发操作。 ```
64 1
|
并行计算 机器人 Python
【python】多进程并发异步调用
【python】多进程并发异步调用
|
Python
165 python网络编程 - 单进程服务器(gevent版)
165 python网络编程 - 单进程服务器(gevent版)
58 0
|
缓存 Java 容器
【并发技术10】线程并发库的使用
【并发技术10】线程并发库的使用
|
Java 调度 容器
【多线程与高并发】- 线程基础与状态
所谓线程就是操作系统(OS)能够进行运算调度的最小单位,是一个基本的CPU执行单元,也是执行程序流的最小单元。能够提高OS的并发性能,减小程序在并发执行时所付出的时空开销。线程是进程的一个实体,是被系统独立调度和分派的基本单位。
151 0
【多线程与高并发】- 线程基础与状态
|
安全 调度 开发者
并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
协程与线程向来焦孟不离,但事实上是,线程更被我们所熟知,在Python编程领域,单核同时间内只能有一个线程运行,这并不是什么缺陷,这实际上是符合客观逻辑的,单核处理器本来就没法同时处理两件事情,要同时进行多件事情本来就需要正在运行的让出处理器,然后才能去处理另一件事情,左手画方右手画圆在现实中本来就不成立,只不过这个让出的过程是线程调度器主动抢占的。
并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
【线程】并发流程控制的同步工具-CountDownLatch
通常我们都会利用并行来优化性能,但是对于串行化的业务,可能需要按顺序执行,那我们怎么才能处理呢?