检索无堆栈Python Tasklet绑定函数的返回值?

2024-06-26 11:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

无堆垛专家

我已经成功地在Stackless Python下(从Stackless和C端)创建了微线程。在

在我看来,为了在Stackless中创建一个微线程,需要将一个任意的Python可调用函数(函数)绑定到微线程(以及所需的参数),这样绑定的可调用函数将作为一个微线程运行。然而,一个任意的callable实际上可能有一个对调用者很重要的返回值。但是我还没有找到一种方法来检索作为微线程运行的绑定可调用函数的返回值。在

在纯Stackless Python方面,我确实看到了一个叫做Micromanaging的用法习惯用法,它用一个管理函数来包装原始函数,反过来,可以捕获原始函数的返回值,并将其保存到某个地方以供其他上下文使用。在

<不幸的是,我的特殊用例涉及从C(C++)侧创建一个任务集,绑定到一个(潜在阻塞的)Python可调用,它具有重要的返回值,稍后将使用。在C端编写这样一个微管理函数似乎不太可行,因为我还没有找到一种方法将C函数转换成可动态调用的PyObject(不涉及模块表初始化等),通常使用静态无状态C函数(我假设原型必须是PyObject*(PyObject*,PyObject*)无论如何,C++世界都是坏主意。在

stacklesscapi似乎也不包含检索微线程返回值的适当函数。这是我必须用Python编写上述微管理函数(可以是有状态的)并提供一种方法来检索保存在某处的返回值(以有状态的方式,即不使用全局变量)吗?或者我可以探索其他的选择?在

非常感谢你

另外,我明白在C和操作系统级编程中,线程函数的返回值只对退出代码有意义,而线程函数将有一个严格的函数原型,即C函数必须遵守一些严格的规则才能作为/由线程运行。现在我们讨论的是Python:)


Tags: 方法函数用法参数状态线程专家调用函数
1条回答
网友
1楼 · 发布于 2024-06-26 11:14:16

从Stackless.com网站公司名称:

“。。。但我还没有找到一种方法来检索作为微线程运行的绑定可调用文件的返回值….”在

我不知道有没有。在

“…稍后将使用的重要返回值。在C端编写这样一个微管理函数似乎不太可行,因为我还没有……”

最简单的方法是将C语言中的Python函数代码定义为字符串,并将其编译成可以作为微线程运行的函数对象。下面是一个Python函数的例子,我把C部分留给您。在

例如

  def RunFunctionAndGetResult(chan, func, *args, **kwargs):
      chan.send(func(*args, **kwargs))

干杯

理查德。在

相关问题 更多 >