Có ai đó đã quản lý để làm cho Cython làm việc với một corseine Asyncio không? Tôi có một ví dụ rất nhỏ mà hoạt động tốt trong Python, và từ chối làm việc trong Cython: đó là tập tin duy nhất mà tôi biên dịch với Cython và thực hiện. Việc thực thi bắt đầu chính xác nhưng không chạy được coroutine. Có vẻ như Cython sửa đổi loại coroutine "sometask", mà sau đó không được xử lý như bình thường bởi Asyncio và Inspect.Sử dụng Cython với 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: Hiện nay tôi làm cho nó "làm việc" bằng cách thay đổi một cách xấu xí của asyncio/file tasks.py ở những nơi mà nó sẽ kiểm tra nếu đối tượng là một máy phát điện, trong khi trên thực tế Cython đã làm cho nó tích hợp sẵn -in chức năng. Đối tượng Cython này sẽ vẫn làm công việc của một corseine asyncio, mặc dù nó có một kiểu khác với mong đợi.
Trông giống như lỗi: https://groups.google.com/forum/#!topic/ Người dùng cython/3NdxAdz97eU – dano
Cảm ơn, tôi đã sao chép câu trả lời của Stefan Behnel, có thể ai đó đã tìm ra giải pháp cho vấn đề này: "Tôi đoán là nó là một lỗi trong asyncio. Nó đặc biệt là các trường hợp " types.GeneratorType ", và trình tạo của Cython không phải loại đó Xem "_COROUTINE_TYPES" và "iscoroutine()" trong asyncio/coroutines.py. Đáng buồn thay, không có ABC cho máy phát điện bằng Python. Stefan " – MoriB