问题标签 [python-stackless]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Eventlet 或 gevent 或 Stackless + Twisted、Pylons、Django 和 SQL Alchemy
我们将 Twisted 广泛用于需要大量异步 io 的应用程序。在某些情况下,东西是受 cpu 限制的,为此我们产生了一个进程池来完成工作,并拥有一个跨多个服务器管理这些进程的系统——所有这些都在 Twisted 中完成。效果很好。问题是很难让新的团队成员跟上进度。在 Twisted 中编写异步代码需要接近垂直的学习曲线。就好像人类天生就不会那样想。
我们可能正在考虑采用混合方法。也许将 xmlrpc 服务器部分和进程管理保留在 Twisted 中,并在代码中实现其他内容,至少在某种程度上看起来是同步的,而不是同步的。再说一次,我喜欢显式而不是隐式,所以我必须多考虑一下。无论如何到greenlets - 这些东西的效果如何?所以有 Stackless,正如你从我的盖伦特化身中看到的那样,我很清楚它在 CCP 的旗舰 EVE Online 游戏中的第一手使用取得了巨大成功。Eventlet 或 gevent 呢?好吧,目前只有 Eventlet 与 Twisted 一起工作。然而,gevent 声称更快,因为它不是纯 python 实现,而是依赖于 libevent。它还声称具有较少的特质和缺陷。事件据我所知,它由 1 个人维护。这让我有点怀疑,但所有伟大的项目都是这样开始的……然后是PyPy——我什至还没有读完那个——刚刚在这个线程中看到了它:Stackless 的缺点。
太令人困惑了——我想知道到底该怎么做——听起来 Eventlet 可能是最好的选择,但它真的足够稳定吗?有没有人有这方面的经验?我们是否应该使用 Stackless,因为它已经存在并且是经过验证的技术 - 就像 Twisted 一样 - 它们确实可以很好地协同工作。但我仍然讨厌必须有一个单独的 Python 版本才能做到这一点。该怎么办....
不过,这个有点令人讨厌的博客文章对我来说是一针见血:Asynchronous IO for Grownups I don't get the Twisted is like Java remark as to me Java通常是你处于线程思维方式的地方,但无论如何。尽管如此,如果那个猴子补丁真的像那样工作,那么哇。哇!
python - 检索 Stackless Python Tasklet 绑定函数的返回值?
无堆栈专家,
我已经设法在 Stackless Python 下创建了 tasklet(来自 Stackless 和 C 端)。
在我看来,为了在 Stackless 中创建 tasklet,您将任意 Python 可调用(函数)绑定到 tasklet(以及所需的参数),因此绑定的可调用将作为 tasklet 运行。但是,任意可调用对象实际上可能具有对调用者很重要的返回值。但是我还没有看到一种方法来检索作为 tasklet 运行的绑定可调用对象的返回值。
在纯 Stackless Python 方面,我确实看到了一个称为 Micromanaging 的用法习惯,它用一个管理函数包装了原始函数,这反过来可以捕获原始函数的返回值并将其保存在某个地方以在其他上下文中使用。
不幸的是,我的特殊用例涉及从 C (C++) 端创建一个 tasklet,绑定到一个(可能阻塞的)Python 可调用对象,该可调用对象具有稍后使用的重要返回值。看来在C端写这样一个Micromanaging函数不是很可行,因为我还没有找到将C函数变成PyObject动态调用的方法(不涉及模块表初始化等),并且使用静态无状态C 函数(我假设原型必须是 PyObject* (PyObject*, PyObject*))在 C++ 世界中通常是一个坏主意。
Stackless C API 似乎也没有包含适当的函数来检索 tasklet 的返回值。这是我必须在 Python 中编写上面提到的微管理函数(可能是有状态的)的唯一选择,并提供一种方法来检索保存在某处的返回值(以有状态的方式,即不使用全局变量)?还是我可以探索其他选择?
非常感谢你,
林
PS我理解在C和操作系统级别的编程中,线程函数的返回值只对退出代码有意义,并且线程函数会有一个严格的函数原型,即C函数必须遵守一些严格的规则才能成为可运行的作为/通过线程。现在我们正在谈论 Python :)
python - 哪个适用于 python 和 Erlang 的 Actor 模型库/框架?
我正在为 Python 2.x 寻找一个易于学习的 Actor 库或框架。我尝试过 Candygram 和 Twisted,但我不喜欢它们。我想要一些很容易扩展到 suppero Greenlet (= stackless python) 的东西。
- Candygram 太旧了。
- 扭曲太复杂了。
- Gevent:是否可以支持Actors模型还不清楚。
你有什么建议?
c++ - 为什么 Python/C API 在 PyRun_SimpleFile 上崩溃?
我一直在尝试在 C++ 应用程序中嵌入不同的脚本语言,目前我正在尝试 Stackless Python 3.1。我已经尝试了几个教程和示例,我能找到的很少,尝试从应用程序运行一个简单的脚本。
出于某种奇怪的原因,运行这段代码会导致访问冲突:
我在网上搜索了其他有类似问题的人,只找到了一个。他们唯一的解决方案是一种只有在旧版本的 Python 中才有可能的解决方法:创建一个 python 文件对象并将该 python 文件对象中的返回FILE*
到PyRun_SimpleFile
. 但是,此类函数调用不可用,Python 3.1 API 从文件描述符创建文件对象并返回文件描述符,但该PyRun_SimpleFile
函数仍然需要FILE*
.
我不知道如何从文件中运行任何脚本,没有手动将整个文件加载到内存中并将其作为一个巨大的字符串运行,当然不是一个实用的解决方案。
是什么赋予了?如果 API 出现内部错误,我该如何完成此任务?
更新:我已经设法从源代码构建 Stackless Python 3.1,但崩溃仍然完全没有改变,尽管使用了相同的 C 运行时库。我的项目和 Stackless Python 3.1 源代码都是使用 Visual Studio 2010 的 C++ 编译器和 C 运行时构建的。我不再知道什么可以解决这个问题,除了修改 Python 以使用文件名而不是 FILE*。另一个可怕的解决方法。
python - 基于延续的python web应用程序框架的设计
java、ruby 等有许多基于延续的框架,但在 python 中没有。Nagare 框架在一定程度上解决了这个问题,但它不使用标准 python,而是使用 stackless python 来解决延续问题。
我想知道,
在标准 python 中创建这样的延续 web 框架的标准 python 约束的哪一部分?
以及解决方法是什么?什么是延续框架架构的标准部分(因为模型视图控制器在 MVC 中)?
python - 在无堆栈 python 中,通过通道发送的数据是否不可变?
我有一个典型的生产者、消费者模式。如果生产者通过通道发送对象,则生产者将被阻塞,直到消费者接受该对象。消费者接受对象后,生产者以某种方式改变对象。消费者是否看到对象被改变?或者通过通道发送数据时是否存在隐式副本?
python - 在游戏的状态机实现中,无堆栈 Python 的微线程比 Lua 的协程有什么优势?
与 Lua 的协程相比,无堆栈 python 实现有什么优势吗?他们有什么区别?
python - 沙盒和无堆栈python?
我需要一种脚本语言来描述非常复杂的工作流程。
每当需要用户输入时,这些工作流程都需要暂停,并在输入后恢复(可能几个月后)。似乎来自 Stackless 的可序列化延续将是一个不错的选择。
用户还需要能够自己编辑工作流。我不确定序列化的延续将如何处理底层代码更改。我想我可能需要将 Git 版本哈希与延续一起保存,并且只在不需要状态的检查点“升级”延续。
我更喜欢 Python 语法,因为可读性是一个非常高的优先级,而动态特性是关键。不过,我愿意接受建议。
- 最终,我可能会编写一个可视化的流程图编辑器来操作底层代码。
我深入研究了 Stackless 和 PyPy。Stackless 似乎没有提供任何沙盒的承诺,而 PyPy 似乎同时提供了 stackless 和沙盒,但我找不到任何提及同时拥有两者的内容。
有什么解决办法吗?如果那里有专家可以让我找到一个好的解决方案,我有一个贝宝帐户,我愿意使用它。
python - Python/Erlang:Twisted、Stackless、Greenlet、Eventlet、协程有什么区别?它们是否类似于 Erlang 进程?
我的不完全理解是 Twisted、Stackless、Greenlet、Eventlet、Coroutines 都使用了异步网络 IO 和用户态线程,这些线程非常轻量级且切换速度很快。但我不确定它们之间有什么区别。
它们听起来也与 Erlang 进程非常相似。它们几乎是一回事吗?
任何可以帮助我更多地理解这个主题的人将不胜感激。