问题标签 [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 - 用于设计 mmo 的好的 python 库?基于演员的设计
我正在尝试使用python设计一个mmo游戏......
我已经评估了stackless,因为它不是一般的python而且它是一个fork,我不想使用它
我正在尝试在 pysage candygram Dramatis 和 parley 之间进行选择
有人尝试过这些库中的任何一个吗?
非常感谢您的回复
python - 无堆栈python和多核?
所以,我在玩Stackless Python ,一个问题突然出现在我的脑海中,也许这是“假设”或“常见”知识,但我在stackless 站点上的任何地方都找不到它。
Stackless Python是否利用了多核 CPU?在普通的 Python 中,GIL 一直存在,并且要(真正)使用多个内核,您需要使用多个进程,对于Stackless也是如此吗?
python - 是否可以以编程方式构造 Python 堆栈帧并在代码中的任意点开始执行?
是否可以在 CPython 中以编程方式构造一个堆栈(一个或多个堆栈帧)并在任意代码点开始执行?想象以下场景:
您有一个工作流引擎,其中的工作流可以用 Python 编写脚本,其中包含一些调用工作流引擎的结构(例如分支、等待/加入)。
阻塞调用(例如等待或加入)在具有某种持久后备存储的事件调度引擎中设置侦听器条件。
您有一个工作流脚本,它调用引擎中的等待条件,等待稍后将发出信号的某些条件。这会在事件分派引擎中设置侦听器。
工作流脚本的状态,包括程序计数器(或等效状态)在内的相关堆栈帧被保留 - 因为等待条件可能会在几天或几个月后发生。
在此期间,工作流引擎可能会停止并重新启动,这意味着必须能够以编程方式存储和重建工作流脚本的上下文。
事件调度引擎触发等待条件拾取的事件。
工作流引擎读取序列化状态和堆栈,并使用堆栈重建线程。然后它在调用等待服务的地方继续执行。
问题
这可以用未经修改的 Python 解释器来完成吗?更好的是,谁能指出一些可能涵盖此类事情的文档或以编程方式构造堆栈帧并在代码块中间某处开始执行的代码示例?
编辑:为了澄清“未修改的 python 解释器”,我不介意使用 C API(PyThreadState 中是否有足够的信息来做到这一点?)但我不想去探索 Python 解释器的内部结构并拥有建立一个修改过的。
更新:通过一些初步调查,可以使用PyThreadState_Get()
. 这将返回 a 中的线程状态PyThreadState
(在 中定义pystate.h
),该状态具有对 中的堆栈帧的引用frame
。堆栈帧保存在 struct typedef'd to 中PyFrameObject
,该结构定义在frameobject.h
. PyFrameObject
有一个字段f_lasti
(对bobince的道具),它有一个程序计数器,表示为距代码块开头的偏移量。
最后一点是个好消息,因为这意味着只要您保留实际编译的代码块,您就应该能够根据需要为尽可能多的堆栈帧重建局部变量并重新启动代码。我想说这意味着理论上可以不必修改python解释器,尽管这意味着代码仍然可能会与特定版本的解释器紧密耦合。
剩下的三个问题是:
事务状态和“传奇”回滚,这可能可以通过一种用于构建 O/R 映射器的元类黑客来完成。我确实构建了一次原型,所以我对如何实现这一点有一个很好的了解。
稳健地序列化事务状态和任意局部变量。这可以通过读取
__locals__
(可从堆栈帧中获得)并以编程方式构造对 pickle 的调用来完成。但是,我不知道这里可能存在什么问题(如果有的话)。工作流的版本控制和升级。这有点棘手,因为系统没有为工作流节点提供任何符号锚。我们只有锚点 为了做到这一点,我们必须识别所有入口点的偏移量并将它们映射到新版本。手动操作可能可行,但我怀疑很难自动化。如果您想支持此功能,这可能是最大的障碍。
更新 2: PyCodeObject
( code.h
) 中有一个 addr ( f_lasti
)-> 行号映射列表PyCodeObject.co_lnotab
(如果此处错误,请纠正我)。这可能用于促进将工作流更新到新版本的迁移过程,因为冻结的指令指针可以映射到新脚本中的适当位置,根据行号完成。仍然很混乱,但更有希望。
更新 3:我认为这个问题的答案可能是Stackless Python。 您可以暂停任务并将它们序列化。我还没有弄清楚这是否也适用于堆栈。
concurrency - 哪些挑战促进了并行/并发架构的使用?
我对使用内置并行性/并发性的语言的可能性感到非常兴奋,例如stackless python和erlang,并且坚信我们都必须在不久的将来朝着这个方向前进 - 或者会想要因为这将是获得可扩展性和性能的好方法/简单方法。
但是,我非常习惯于以线性/串行/OOP/功能方式思考解决方案,以至于我正在努力以一种值得使用并发的方式来解决我的任何领域问题。我怀疑我只是需要忘掉很多东西,但我想我会问以下问题:
- 您是否在 stackless 或 erlang 或其他中实现了任何相当大的东西?
- 为什么这是一个不错的选择?这是一个不错的选择吗?你还会做吗?
- 您的问题的哪些特征意味着并发/并行是正确的?
- 您是否重新提出了现有问题以利用并发/并行性?和
- 如果是这样,如何?
有谁愿意分享经验吗?
python - Stackless python 网络性能随着时间的推移而下降?
所以我在玩stackless python,编写一个非常简单的网络服务器来教自己使用微线程/tasklet 编程。但是现在我的问题是,当我ab -n 100000 -c 50 http://192.168.0.192/
在 apache bench 中运行类似(100k 个请求,50 个并发)之类的东西时,我得到类似 6k req/s 的东西,第二次运行它我得到 5.5k,第三次 5k,第四次,4.5k等一直到 100req/s 或其他东西。
不过,当我重新启动 python 脚本时,问题就消失了。
现在我的问题是为什么?我忘记删除小任务了吗?我已经检查了 stackless.getruncount() (由于某种原因,它似乎总是返回 1),所以它似乎不会有任何死的 tasklet 闲逛?我尝试在所有已完成的小任务上调用 .kill() ,但没有帮助。我就是想不通这个。
python - Stackless Python 的缺点是什么?
我最近一直在阅读有关Stackless Python的内容,与普通 cPython 相比,它似乎有很多优势。它具有无限递归、微线程、延续等所有很酷的特性,同时比 cPython 快(大约 10%,如果相信Python wiki的话)并且与它兼容(至少版本2.5、2.6和 3.0)。
所有这些看起来都好得令人难以置信。然而,在 TANSTAAFL中,我没有看到 Python 社区对 Stackless 有太多热情,而且PEP 219从未实现过。这是为什么?Stackless 的缺点是什么?Stackless 的衣橱里藏着什么骷髅?
(我知道 Stackless 不提供真正的并发,只是一种更简单的并发编程方式。它并没有真正困扰我。)
.net - 社交多人浏览器游戏的架构(后端选择 + 前端选择 [flash/silverlight])
我正在考虑开发在线多人社交游戏。世界的共享状态需要在后端有一些快速的东西,所以潜在的解决方案似乎是:
服务器上的快速游戏引擎(例如 c++)和一些前端语言(php/python/ruby)+ flash
python中的整个堆栈(使用扭曲或无堆栈python)+ flash
.NET(asp.net 或 asp.net mvc)+ 闪存
.NET + 银光
从生产力的角度来看,第一个可能是过度杀伤(3 个异构层)
编号。4 可能是程序员的天堂(所有层的公共环境),但是:
- 从来没有用 Silverlight 构建过这样的东西,也许在拐角处隐藏着一些令人兴奋的东西
- 可能很难找到 Silverlight 设计师
- 尽管 Flash 电影/剪辑模型与 SL 完整 OO 架构相比受到批评,但在外部设计师设计虚拟世界的额外部分时,它不是一个优势吗?他们可以用例如准备.swf。4 帧上的 4 个项目的视角 - 使用 SL 会不会更难?
- Silvelight 显然缺乏一些游戏功能(如碰撞检测)
你怎么看?
[编辑] 游戏本身将成为更大门户的一部分 - 因此将引擎与一些 Web 框架集成会很好。
python - 在 stackless Python 中,您可以通过通道发送通道吗?
我目前没有运行无堆栈,所以我不能自己尝试。
那么ch2和ch3是同一个频道吗?说:
这个功能让我想起了Robert Pike(Plan9成名)在 Google上发表的关于 Newsqueak的演讲。在 Newsqueak 中,您可以通过频道发送频道。
python - 多处理还是多线程?
我正在制作一个程序,用于在 Python 中运行模拟,带有 wxPython 接口。在程序中,您可以创建一个模拟,程序会为您渲染(=计算)它。渲染有时会非常耗时。
当用户开始模拟并定义初始状态时,我希望程序在后台连续渲染模拟,而用户可能在程序中做不同的事情。有点像一个充满了 YouTube 风格的栏:您只能播放模拟到渲染的点。
我应该使用多个进程或多个线程还是什么?人们告诉我要使用这个multiprocessing
包,我检查了一下,它看起来不错,但我也听说进程与线程不同,不能共享很多信息(我认为我的程序需要共享很多信息。 ) 此外,我还听说过 Stackless Python:它是一个单独的选项吗?我不知道。
请指教。
django - 使用 DJango 进行无堆栈安装和配置
我正在尝试运行使用无堆栈的 DJango 命令扩展。
我已经安装了 Stackless Python(用 python 2.5 编译),所以每当我在控制台输入 python2.5 时,它就会启动,指示版本是 Python 2.5.2 Stackless 3.1b3 060516(python-2.52:72942,2009 年 5 月 26 日,23: 07:34) [GCC 4.3.3] 在 linux2 上
但是在我的 Eclipse 中,我已经将我的 django 应用程序配置为使用 python2.6 运行。特别是在 PyDev 设置中。所以很明显,当我提到import stackless时,它说没有这样的包。
问题是即使我添加了“/usr/local/lib/python2.5/site-packages”目录,它也不会导入无堆栈。
这个问题的解决方案是什么?