与异步请求一起执行功能

时间:2019-07-23 22:43:53

标签: python asynchronous python-requests

我想一次在许多网站上搜索文本。据我了解,我不知道我是否理解正确,此代码不能正常工作。

from twisted.python.threadpool import ThreadPool
from txrequests import Session

pages = ['www.url1.com', 'www.url2.com']
with Session(pool=ThreadPool(maxthreads=10)) as sesh:
   for pagelink in pages:
       newresponse = sesh.get(pagelink)
       npages, text = text_from_html(newresponse.content)

下面是我的相关功能(来自this post),我认为它们的确切内容(文本提取)并不重要,但为防万一,我只列出它们。

def tag_visible(element):
    if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']:
        return False
    if isinstance(element, Comment):
        return False
    return True

def text_from_html(body):
    soup = BeautifulSoup(body, 'html.parser')
    texts = soup.findAll(text=True)
    visible_texts = filter(tag_visible, texts)  
    return soup.find_all('a'), u" ".join(t.strip() for t in visible_texts)

如果我执行此sesh.get()时没有下面的额外功能,那么据我了解:发送了一个请求,也许要花一些时间才能返回响应。在做出响应之前,会发送其他请求。并且可能会在事先提出要求之前做出回应。

如果我只在for循环内发出请求,则这将按计划进行。但是,如果将函数放入for循环中,是否可以停止异步请求?函数是否不等待响应才能执行?我怎样才能顺利地执行这样的事情?

我也乐于接受不同模块的建议,对此我没有特别的依恋-我认为它可以满足我的需要,但我意识到它不一定是唯一可以使用的模块。

0 个答案:

没有答案