请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这里为什么把await workers注释掉后 运行结果还完全一致

gen.mult返回的不是一个future的容器么,不直接运行,这里为什么注释掉 结果还是一样的呢?

正在回答 回答被采纳积分+3

2回答

bobby 2020-05-02 12:17:45

你把代码贴一下 截图说明一下我看看

1 回复 有任何疑惑可以回复我~
  • 提问者 慕的地2470241 #1
    已上传,请老师帮忙看看
    回复 有任何疑惑可以回复我~ 2020-05-06 16:16:52
提问者 慕的地2470241 2020-05-06 16:16:25

//img1.sycdn.imooc.com/szimg/5eb2723a09d9449216380865.jpg






就是老师课上写的  tornado spider

from urllib.parse import urljoin

from bs4 import BeautifulSoup
from tornado import gen, httpclient, ioloop, queues

base_url = "http://www.tornadoweb.org/en/stable/"
concurrency = 3

async def get_url_links(url):
    response = await httpclient.AsyncHTTPClient().fetch("http://www.tornadoweb.org/en/stable/")
    html = response.body.decode("utf8")
    soup = BeautifulSoup(html)
    links = [urljoin(base_url, a.get("href")) for a in soup.find_all("a", href=True)]
    return links

async def main():
    seen_set = set()
    q = queues.Queue()

    async def fetch_url(current_url):
        #生产者
        if current_url in seen_set:
            return

        print("获取: {}".format(current_url))
        seen_set.add(current_url)
        next_urls = await get_url_links(current_url)
        for new_url in next_urls:
            if new_url.startswith(base_url):
                #放入队列,
                await q.put(new_url)

    async def worker():
        async for url in q:
            if url is None:
                return
            try:
                await fetch_url(url)
            except Exception as e:
                print("excepiton")
            finally:
                q.task_done()

    #放入初始url到队列
    await q.put(base_url)

    #启动协程
    workers = gen.multi([worker() for _ in range(concurrency)])
    await q.join()

    for _ in range(concurrency):
        await q.put(None)

    await workers


if __name__ == "__main__":
    io_loop = ioloop.IOLoop.current()
    io_loop.run_sync(main)

//img1.sycdn.imooc.com/szimg/5eb2723b093cc38518760932.jpg


0 回复 有任何疑惑可以回复我~
  • bobby #1
    你可以把完整的代码贴一下 我本地运行试试
    回复 有任何疑惑可以回复我~ 2020-05-09 09:36:37
  • 提问者 慕的地2470241 回复 bobby #2
    已经上传  麻烦老师解答
    回复 有任何疑惑可以回复我~ 2020-05-09 19:13:32
  • 提问者 慕的地2470241 回复 bobby #3
    最后一行的 await workers
    回复 有任何疑惑可以回复我~ 2020-05-09 19:13:57
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号