簡體   English   中英

將Cython與Asyncio一起使用(Python 3.4)

[英]Using Cython with Asyncio (Python 3.4)

有人設法使Cython與Asyncio協程一起工作嗎? 我有一個非常簡單的例子,在Python中運行良好,並且拒絕在Cython中工作:它是我用Cython編譯並執行的以下單個文件。 執行正確啟動但無法運行協同程序。 似乎Cython修改了“sometask”協程的類型,然后Asyncio和Inspect不會像往常那樣對待它。

#!/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()

更新:目前我通過在一個丑陋的方式修改asyncio / tasks.py文件來檢查對象是否是一個生成器的地方讓它“工作”,而實際上Cython使它成為一個內置函數。 這個Cython對象仍然會執行asyncio協同程序的工作,即使它具有與預期不同的類型。

幸運的是,Stefan Behnel在他最后一個版本的Cython主分支中解決了這個問題。

編輯:解決所有問題的提交是c8a2d30806b4e479515d44ee827b3a1651ac8731

可能更合適的解決方案是在Python端,特別是在Asyncio中,以識別生成器而不檢查其類型。 完整的解決方案需要Python 3.4.2(肯定> Python 3.4.0)鏈接到更多詳細信息: https//groups.google.com/forum/#!topic / cyce-users / g146SZHxRyM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM