2017-10-17 193 views
1

例(以下問題):??什麼是異步迭代器的類型?

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 

現在,我用的receive返回類型掙扎(它返回的東西,可以用async for x in y進行迭代,這是什麼它是一個awaitable迭代器它在awaitables的迭代器嗎?也許別的東西完全?

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

它有什麼關係? Python是一種動態語言,所以它應該沒關係。你似乎知道你可以在y中使用'async for x',這似乎是結束了這件事。 – quamrana

+1

@quamrana你似乎可以閱讀這個問題,但你不知道答案。你的評論有什麼意義? – wvxvw

+0

那麼,我仍然想知道爲什麼它對你的重要性是什麼。如果你想知道這個類型是什麼,你將如何處理這些信息? – quamrana

回答

1

Source codetyping模塊不容置疑。

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

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

,如果你確信這將是嚴格的迭代器。