2017-10-17 6 views
1

Beispiel (Frage folgt.):?Was ist der Typ des asynchronen Iterators?

import asyncio 
import typing as t 

from aiokafka import AIOKafkaConsumer 


class KafkaSimpleClient: 

    ... 

    async def receive(self, topic: str) -> ???: 
     bootstrap_servers = ','.join(
      '{}:{}'.format(host, port) 
      for host, port in self._bootstrap_servers 
     ) 
     consumer = AIOKafkaConsumer(
      loop=asyncio.get_event_loop(), 
      bootstrap_servers=bootstrap_servers, 
      metadata_max_age_ms=5000, 
     ) 
     consumer.subscribe(pattern=topic) 
     await consumer.start() 
     return consumer 

Jetzt bin ich mit dem Rückgabetyp receive kämpfen (es gibt etwas, das mit async for x in y iteriert werden kann, was es ist, ist es ein awaitable Iterator es ein Iterator über awaitables? Vielleicht etwas ganz anderes?

  • ??? = t.Awaitable[t.Iterator]
  • ??? = t.Iterator[t.Awaitable]
  • ??? = (Something else)
+0

Was ist es wichtig, was es ist? Python ist eine dynamische Sprache, daher sollte es keine Rolle spielen. Sie scheinen zu wissen, dass Sie Async für x in y verwenden können: so scheint das ein Ende zu sein. – quamrana

+1

@quamrana Sie scheinen in der Lage zu sein, die Frage zu lesen, aber Sie kennen die Antwort nicht. Was ist der Sinn Ihres Kommentars? – wvxvw

+0

Nun, ich möchte immer noch wissen, warum es dir wichtig ist, was der Typ ist. Wenn Sie wissen würden, was der Typ ist, was würden Sie mit den Informationen machen? – quamrana

Antwort

1

Source code von typing Modul lässt keine Zweifel.

async def receive(self, topic: str) -> t.AsyncIterable: 

oder

async def receive(self, topic: str) -> t.AsyncIterator: 

, wenn Sie sicher, dass es streng Iterator sein werden.