Python asyncio / aiohttp: ValueError: demasiados descriptores de archivo en select () en Windows

Hola a todos, tengo problemas para tratar de entender asyncio y aiohttp y hacer que ambos funcionen juntos correctamente. No solo no entiendo adecuadamente lo que estoy haciendo, en este punto me he encontrado con un problema que no tengo idea de cómo resolver.

Estoy usando Windows 10 64 bits, última actualización.

El siguiente código me devuelve una lista de páginas que no contienen html en Content-Type en el encabezado usando asyncio.

import asyncio
import aiohttp

MAXitems = 30

async def getHeaders(url, session, sema):
    async with session:
        async with sema:
            try:
                async with session.head(url) as response:
                    try:
                        if "html" in response.headers["Content-Type"]:
                            return url, True
                        else:
                            return url, False
                    except:
                        return url, False
            except:
                return url, False


def checkUrlsWithoutHtml(listOfUrls):
    headersWithoutHtml = set()
    while(len(listOfUrls) != 0):
        blockurls = []
        print(len(listOfUrls))
        items = 0
        for num in range(0, len(listOfUrls)):
            if num < MAXitems:
                blockurls.append(listOfUrls[num - items])
                listOfUrls.remove(listOfUrls[num - items])
                items +=1
        loop = asyncio.get_event_loop()
        semaphoreHeaders = asyncio.Semaphore(50)
        session = aiohttp.ClientSession()
        data = loop.run_until_complete(asyncio.gather(*(getHeaders(url, session, semaphoreHeaders) for url in blockurls)))
        for header in data:
            if False == header[1]:
                headersWithoutHtml.add(header)
    return headersWithoutHtml


listOfUrls = ['http://www.google.com', 'http://www.reddit.com']
headersWithoutHtml=  checkUrlsWithoutHtml(listOfUrls)

for header in headersWithoutHtml:
    print(header[0])

Cuando lo ejecuto con, digamos, 2000 URL (a veces) devuelve algo como:

data = loop.run_until_complete(asyncio.gather(*(getHeaders(url, session, semaphoreHeaders) for url in blockurls)))
  File "USER\AppData\Local\Programs\Python\Python36-32\lib\asyncio\base_events.py", line 454, in run_until_complete
    self.run_forever()
  File "USER\AppData\Local\Programs\Python\Python36-32\lib\asyncio\base_events.py", line 421, in run_forever
    self._run_once()
  File "USER\AppData\Local\Programs\Python\Python36-32\lib\asyncio\base_events.py", line 1390, in _run_once
    event_list = self._selector.select(timeout)
  File "USER\AppData\Local\Programs\Python\Python36-32\lib\selectors.py", line 323, in select
    r, w, _ = self._select(self._readers, self._writers, [], timeout)
  File "USER\AppData\Local\Programs\Python\Python36-32\lib\selectors.py", line 314, in _select
    r, w, x = select.select(r, w, w, timeout)
ValueError: too many file descriptors in select()

Nota 1: Edité mi nombre con USER en el usuario.

Nota 2: Por alguna razón, reddit.com regresa ya que no contiene HTML, este es un problema completamente separado que trataré de resolver, sin embargo, si nota alguna otra inconsistencia en mi código que lo solucionaría, por favor indíquelo.

Nota 3: Mi código está mal construido porque intenté cambiar muchas cosas para tratar de solucionar este problema, pero no tuve suerte.

He escuchado en alguna parte que esto es una restricción de Windows y no hay forma de evitarlo, el problema es que:

a) No entiendo directamente lo que significa "demasiados descriptores de archivo en select ()".

b) ¿Qué estoy haciendo mal que Windows no puede manejar? He visto a personas empujar miles de solicitudes con asyncio y aiohttp, pero incluso con mi fragmentación no puedo empujar 30-50 sin obtener un error de valor.

Editar: Resulta que con MAXitems = 10 todavía no me ha fallado, pero como no puedo seguir el patrón, no tengo idea de por qué o cómo eso me dice algo.

Edit2: No importa, necesitaba más tiempo para bloquearse, pero eventualmente incluso con MAXitems = 10

Respuestas a la pregunta(2)

Su respuesta a la pregunta