【发布时间】:2019-01-26 01:31:57
【问题描述】:
我有一个为我编写的脚本,但我无法执行它...我收到以下错误...
Traceback(最近一次调用最后一次):
文件“crawler.py”,第 56 行,在 loop.run_until_complete(future) 文件“C:\Users\lisa\AppData\Local\Programs\Python\Python37-32\lib\asyncio\base_events.py”, 第 568 行,在 run_until_complete 在运行中返回 future.result() 文件“crawler.py”,第 51 行 等待响应文件“crawler.py”,第 32 行,在 bound_fetch 中 await fetch(url, session) 文件“crawler.py”,第 22 行,在 fetch 与 session.get(url, headers=headers) 异步作为响应:文件“C:\Users\lisa\AppData\Local\Programs\Python\Python37-32\lib\site-packages\aiohttp\client.py”, 第 843 行,在 aenter 中 self._resp = 等待 self._coro 文件 "C:\Users\lisa\AppData\Local\Programs\Python\Python37-32\lib\site-packages\aiohttp\client.py", 第 387 行,在 _request 中 等待 resp.start(conn) 文件“C:\Users\lisa\AppData\Local\Programs\Python\Python37-32\lib\site-packages\aiohttp\client_reqrep.py”, 第 748 行,开始 消息,有效负载 = 等待 self._protocol.read() 文件“C:\Users\lisa\AppData\Local\Programs\Python\Python37-32\lib\site-packages\aiohttp\streams.py”, 第 533 行,已读 等待 self._waiter aiohttp.client_exceptions.ServerDisconnectedError: None
我有什么明显的遗漏吗?我可以在没有线程的情况下运行相同的脚本,谢谢...
import random
import asyncio
from aiohttp import ClientSession
import requests
from itertools import product
from string import *
from multiprocessing import Pool
from itertools import islice
import sys
headers = {'User-Agent': 'Mozilla/5.0'}
letter = sys.argv[1]
number = int(sys.argv[2])
first_group = product(ascii_lowercase, repeat=2)
second_group = product(digits, repeat=3)
codeList = [''.join([''.join(k) for k in prod]) for prod in product([letter], first_group, second_group)]
async def fetch(url, session):
async with session.get(url, headers=headers) as response:
statusCode = response.status
if(statusCode == 200):
print("{} statusCode is {}".format(url, statusCode))
return await response.read()
async def bound_fetch(sem, url, session):
async with sem:
await fetch(url, session)
def getUrl(codeIdex):
return "https://www.blahblah.com/" + codeList[codeIdex] + ".png"
async def run(r):
tasks = []
sem = asyncio.Semaphore(1000)
async with ClientSession() as session:
for i in range(r):
task = asyncio.ensure_future(bound_fetch(sem, getUrl(i), session))
tasks.append(task)
responses = asyncio.gather(*tasks)
await responses
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(run(number))
loop.run_until_complete(future)
【问题讨论】:
-
您能否将代码缩减为最小示例,但仍能重现问题,最好使用我们可以测试的公开网站?如图所示,您的代码甚至具有它甚至不使用的导入,例如
multiprocessing.Pool。
标签: python multithreading python-asyncio