Czy ktoś zdołał sprawić, aby Cython działał z Corynine Asyncio? Mam bardzo trywialny przykład, który działa dobrze w Pythonie, i odmawia pracy w Cython: jest to następujący pojedynczy plik, który kompiluję z Cythonem i wykonuję. Wykonanie rozpoczyna się poprawnie, ale nie uruchamia współprogramu. Wygląda na to, że Cython modyfikuje typ coroutine "something", który nie jest traktowany jak zwykle przez Asyncio i Inspect.Używanie Cythona z Asyncio (Python 3.4)
#!/usr/bin/env python
import asyncio
@asyncio.coroutine
def sometask():
counter = 0
while True:
print(counter)
yield from asyncio.sleep(1)
counter += 1
def runloop():
loop = asyncio.get_event_loop()
asyncio.async(sometask())
try:
print('Start loop')
loop.run_forever()
except KeyboardInterrupt:
print('Aborted by user')
loop.close()
UPDATE: Obecnie robię to „praca”, modyfikując w ten sposób brzydkie asyncio plik/tasks.py w miejscach, gdzie sprawdza, czy obiekt jest generator, podczas gdy w rzeczywistości Cython sprawiły, że wbudowany -w działaniu. Ten obiekt w języku Cython nadal będzie działał jako corynine asyncio, mimo że ma inny typ niż oczekiwano.
Wygląda błędu: https://groups.google.com/forum/#!topic/ Cython-users/3NdxAdz97eU – dano
Dzięki, kopiuję i wklejaję odpowiedź Stefana Behnela, być może ktoś znalazł sposób obejścia tego problemu: "Domyślam się, że jest to błąd w asyncio, w specjalnych przypadkach: " types.GeneratorType ", a generatory Cythona to nie tego typu. Patrz "_COROUTINE_TYPES" i "iscoroutine()" w asyncio/coroutines.py. Niestety, nie ma ABC dla generatorów w Pythonie. Stefan " – MoriB