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)


相关文章
|
11月前
进程并发装饰器
进程并发装饰器
58 0
一日一技:使用 asyncio 如何限制协程的并发数
一日一技:使用 asyncio 如何限制协程的并发数
1023 0
一日一技:使用 asyncio 如何限制协程的并发数
|
6月前
|
Java 测试技术 Python
Python的多线程允许在同一进程中并发执行任务
【5月更文挑战第17天】Python的多线程允许在同一进程中并发执行任务。示例1展示了创建5个线程打印"Hello World",每个线程调用同一函数并使用`join()`等待所有线程完成。示例2使用`ThreadPoolExecutor`下载网页,创建线程池处理多个URL,打印出每个网页的大小。Python多线程还可用于线程间通信和同步,如使用Queue和Lock。
69 1
|
6月前
|
存储 Python
python使用gevent库来创建协程,并通过协程实现并发执行不同的任务
```markdown 这段Python代码利用`gevent`库实现并发执行协程。定义了两个打印函数`f1`和`f2`,分别输出"csdn"和"yyds"。代码首先创建列表`t_l`,并启动5个`f1`协程,将其加入列表并等待所有协程完成。随后,同样方式启动5个`f2`协程,存入`t1_l`列表并等待执行完毕。整体展示了`gevent`的协程并发操作。 ```
56 1
|
并行计算 机器人 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
|
调度 C++
进程、线程、并发、并行、同步、异步、阻塞、非阻塞
乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。
【线程】并发流程控制的同步工具-CountDownLatch
通常我们都会利用并行来优化性能,但是对于串行化的业务,可能需要按顺序执行,那我们怎么才能处理呢?