无匹配的专家,

我设法在无stackless python下创建了任务(既来自stackless and t t t the cond)。

在我看来,为了在无stack中创建一个任务,您可以将任意的python callable(函数)绑定到任务(以及所需的参数),因此绑定的可呼叫将作为任务运行。但是,任意可呼叫实际上可能具有对呼叫者很重要的返回值。但是,我还没有看到一种方法来检索绑定的可可运行的返回值。

在纯净的python方面,我确实看到了一个名为Micromandaging的用法习惯,它将原始功能包裹在托管功能上,这又是 可以 捕获原始函数的返回值,并将其保存在某些其他上下文中的某个地方。

不幸的是,我的特殊用例涉及从C(C ++)侧创建一个任务,并绑定到(潜在阻止)Python Collable,该python可呼叫具有以后要使用的重要回报值。似乎在C端编写这样的微观管理功能不是很可行,因为我还没有找到将C函数转换为PyObject callable动态的方法(不涉及模块表初始化等),并且使用静态无状态C函数(我认为原型必须是PyObject*(PyObject*,PyObject*))通常是C ++世界下的一个坏主意。

无堆叠的C API似乎也没有包含适当的函数来检索任务的返回值。这是我必须在上面提到的微观管理函数的唯一选项(可以 在Python中保持状态),并提供一种方法来检索在某个地方保存的回报值(以状态方式,即不使用全球变量)?还是我可以探索其他选择?

非常感谢你,

PS我了解,在C和操作系统级别编程中,线程函数的返回值仅对退出代码有意义,线程功能将具有严格的函数原型,IE C函数必须遵守某些严格的规则才能运行作为/通过线程。现在我们在谈论python :)

有帮助吗?

解决方案

来自stackless.com:

“ ...但是我还没有看到一种方法来检索绑定的可召集的返回值作为工作人员。

我不知道有一个。

“ ...以后要使用的重要回报值。似乎在C端编写这样的微观管理功能不是很可行的,因为我没有……”

最简单的方法是将C中的python函数代码定义为字符串,并将其编译为可以作为任务运行的函数对象。 python函数示例是我留给您的C部分。

例如

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

干杯,

理查德。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top