首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C访问异步/ uvloop

如何从C访问异步/ uvloop
EN

Stack Overflow用户
提问于 2018-04-12 22:36:41
回答 2查看 965关注 0票数 3

我对python完全陌生,但有一个使用uvloop的异步python应用程序,它使用我创建的have模块,它还需要访问异步循环。

1)异步到现在还没有一个c-api用于这一点?任何可以在C中使用的事件循环的黑客?这件事有讨论过吗?

2) uvloop使用了我在C中熟悉的libuv。如果我能够捕获uv_loop_t指针,就可以将其连接到循环中。我想我可以:

( A)使用PyObject * to uvloop的循环,计算到uv_loop_t*的偏移量并使用它?假设我知道PyObject_HEAD的长度?

代码语言:javascript
复制
libuv_loop = (uv_loop_t*)((void*)(loop)+0x8);

struct __pyx_obj_6uvloop_4loop_Loop {
    PyObject_HEAD
    uv_loop_t *uvloop;

( B)或非恶意修改uvloop以公开循环指针。我在这里完全一无所知,因为我从来没有看过cython代码。我可以在循环中创建python函数,从我的C代码中调用它并获得C指针吗?比如:

代码语言:javascript
复制
(uv_loop_t*)PyObject_CallFunctionObjArgs( getLoop, NULL )

通过在这里添加getLoop:

https://github.com/MagicStack/uvloop/blob/master/uvloop/loop.pyx

代码语言:javascript
复制
cdef uv.uv_loop_t* _getLoop(self):
    return self.uvloop
EN

回答 2

Stack Overflow用户

发布于 2018-04-13 09:00:27

asyncio还没有C。

我们计划在将来的Python版本中添加它(3.8可能)。

现在您应该使用PyObject_* api。

uvloop是用Cython编写的,但是库中也没有公共C。您可以访问私有的uvloop API,但是公开的函数名称和数据结构可以在任何时候更改而不需要公开通知,因为它们被认为是私有的,用户永远不应该使用它。

票数 9
EN

Stack Overflow用户

发布于 2022-08-28 07:45:36

uvloop也在寻找这个方法,巧合的是,几天前uvloop添加了一个loop.get_uv_loop_t_ptr()方法:)

https://github.com/MagicStack/uvloop/pull/310

现在我们只需要等待一个新的版本(v0.17 ?)这包括这个公关(或者自己建立它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49806841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档