Cra*_*les 2 cython c-api python-asyncio uvloop
我是python的新手,但是有一个使用uvloop的异步python应用程序,它使用我创建的C api模块,它也需要访问异步循环.
1)asyncio还没有这个c-api?任何在C中使用事件循环的hack?这是在哪里讨论?
2)uvloop使用我在C中熟悉的libuv.如果我可以抓取uv_loop_t指针,我可以挂钩循环.我想我可以:
A)使用PyObject*到uvloop的循环计算uv_loop_t*的偏移并使用它?假设我知道PyObject_HEAD的长度?
libuv_loop = (uv_loop_t*)((void*)(loop)+0x8);
struct __pyx_obj_6uvloop_4loop_Loop {
PyObject_HEAD
uv_loop_t *uvloop;
Run Code Online (Sandbox Code Playgroud)
B)或非hacky修改uvloop以暴露循环指针.因为我从来没有看过cython代码,所以我完全无能为力.我可以在循环上创建一个python函数,从我的C代码调用它并获取C指针吗?喜欢:
(uv_loop_t*)PyObject_CallFunctionObjArgs( getLoop, NULL )
Run Code Online (Sandbox Code Playgroud)
通过在这里添加getLoop:
https://github.com/MagicStack/uvloop/blob/master/uvloop/loop.pyx
cdef uv.uv_loop_t* _getLoop(self):
return self.uvloop
Run Code Online (Sandbox Code Playgroud)
asyncio 还没有C API.
我们计划在未来的Python版本中添加它(可能是3.8版本).
现在你应该使用PyObject_*api.
uvloop是写的,Cython但库也没有Public C API.您可以访问私有uvloopAPI,但暴露的函数名和数据结构可以在任何时候更改,恕不另行通知公众,因为他们被认为是私人的,用户不应该使用它.
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |