使用asyncio了解多个任务

时间:2017-09-06 01:31:39

标签: python python-asyncio

我正在尝试使用本教程学习如何使用python asyncio:http://terriblecode.com/blog/asynchronous-http-requests-in-python/并将其应用于我想要做的事情。

我试图从api获取网址,然后访问这些网址以收集其中包含的更多信息。为了开始,我将按照教程在本地保存信息,然后从.json文件中获取信息,而不是点击API。

我正在使用python 3.5,所以我只是将f字符串更改为可以工作的字符串,但代码非常相似。

import asyncio
import aiofiles
import aiohttp
import json

base_url = 'https://demo.com/api/'

HEADERS = {
    "API-Key": "<removed>",
    'Content-Type': 'application/json',
    'user-agent': 'Testing API'
}

async def get_bad_urls(url_args):
    endpoint = 'search/'
    url = base_url + endpoint
    print("Collecting urls...")
    async with aiohttp.ClientSession() as session:
        async with session.get(url, headers=HEADERS) as resp:
            data = await resp.json()
            for url in (data['results']):
                url_args.append(url['_id'])


async def get_url_data(url_uuid):
    endpoint = 'result/' + url_uuid
    url = base_url + endpoint
    print("Getting URL result details...")
    async with aiohttp.ClientSession() as session:
        async with session.get(url, headers=HEADERS) as resp:
            print(resp)
            data = await resp.text()
    async with aiofiles.open(url_uuid + ".json", 'w') as file:
        await file.write(data)

loop = asyncio.get_event_loop()
url_args = []
loop.run_until_complete(get_bad_urls(url_args))
print(url_args)
loop.run_until_complete(
asyncio.gather(
    *(get_url_data(*uuid) for uuid in url_args)
)
)

我得到的错误是:

  

回溯(最近一次调用最后一次):文件&#34; /home/linux/PycharmProjects/url/main.py",第44行,在       *(url_args中uuid的get_url_data(* uuid))文件&#34; /home/linux/PycharmProjects/url/main.py",第44行,in       *(url_args中uuid的get_url_data(* uuid))TypeError:get_url_data()需要1个位置参数但是36个被赋予

任何正确方向的指针,即使是在废弃我所拥有的东西并以不同的方式进行,我们将不胜感激。感谢。

0 个答案:

没有答案