Sto sviluppando il framework di bot per la chat di Python con asyncio
. Ma guardo PEP-492 e c'è una nuova sintassi, async
/await
e finalmente accettato.Coroutine in python tra 3.4 e 3.5, Come posso mantenere la compatibilità di backwords?
Mi piace la sintassi async
/await
e voglio usarlo. ma mi preoccupo della compatibilità con 3,4 backwords.
Se utilizzo la nuova sintassi nel mio codice, qualcuno può usarlo in 3.4?
Per esempio, ho scrivere del codice in questo modo,
import asyncio
class ChatBot:
def __init__(self, loop):
self.loop = loop
async def connect(self):
self.reader, self.writer = await asyncio.open_connect(HOST, PORT, loop=self.loop)
async def read():
return await self.reader.read()
async def run(self):
running = True
while running:
try:
await self.connect()
line = await self.read()
if not line:
continue
await self.parse(line)
except BotInternalError as e:
if e.stop:
running = False
break
except:
pass
async def parse(self, msg):
if msg.startswith('PING'):
self.pong()
elif msg.startswith('ERROR'):
self.error()
else:
await self.some_work(msg)
async def some_work(self, msg):
# some looooooooong works
self.send(msg)
def send(self, msg):
self.writer.write(msg)
Than, posso usarlo con questa fonte in py35
loop = asyncio.get_event_loop() # I don't know it really needed in py35.
bot = ChatBot(loop)
asyncio.run_until_complete(bot.run())
Ma, py34 non hanno await
sintassi. Se ho caricato sopra la fonte su PyPI senza vincoli di versione e qualcuno l'ha installato su py34, funzionerà correttamente? Come posso tenerlo?
È divertente vedere la struttura '@ asyncio.coroutine' descritta come" vecchia "quando è apparsa solo nella versione più recente di Python. :-) –
@MarkDickinson Effettivamente. Python si sta evolvendo piuttosto rapidamente in questo spazio. :) – dano
Quindi, poiché la transizione tra Python 2 e Python 3 è stata così semplice, la comunità Python ha deciso di rendere la transizione semplice anche tra Python 3.4 e Python 3.5 :-)? – z1naOK9nu8iY5A