问题标签 [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 - 无堆栈python如何快速并发?
无堆栈 python 没有很好地使用多核,那么它应该比 python 线程/多处理更快的点在哪里?
所有的 benchmark 都使用 stackless python tasklet 与 python 线程锁和队列进行比较,这是不公平的,因为锁总是效率低下
看,如果使用不带锁的单线程函数调用,它应该和无堆栈 python 一样高效
erlang - 哪些编程语言支持热代码交换和/或沙盒?
我想编写一个基于网络的 MMO 游戏,允许用户编写 AI 并将其作为游戏的一部分运行。我计划将 Html5 用于图形,并希望它基于网络,以便可以从智能手机访问。我需要找到一种支持沙盒、并发、热代码交换和大型库的编程语言,以使事情变得更容易。
目前我的研究对象是 Erlang、Stackless Python 和 Lua。任何帮助表示赞赏。
python - 阻塞通道与异步消息传递
我注意到两种“消息传递”的方法。一种我见过 Erlang 的使用,另一种来自 Stackless Python。据我了解,这就是区别
Erlang Style - 消息被发送并排队到接收进程的邮箱中。从那里他们以先进先出的方式被移除。一旦第一个进程发送消息,它就可以自由地继续。
Python 风格 - 进程 A 排队等待发送到进程 B。B 当前正在执行一些其他操作,因此 A 被冻结,直到 B 准备好接收。一旦 B 打开读取通道,A 发送数据,然后它们都继续。
现在我看到 Erlang 方法的优点是你没有任何阻塞的进程。如果 B 永远无法接收,A 仍然可以继续。但是我注意到在我编写的一些程序中,Erlang 消息框可能会充满数百(或数千)条消息,因为消息的流入量大于流出量。
现在我还没有用任何一种框架/语言编写过大型程序,所以我想知道你的经验是否与此有关,如果这是我什至应该担心的事情。
是的,我知道这是抽象的,但我也在寻找相当抽象的答案。
python - Stackless Python 3.1 的基本异步(非阻塞)HTTP 客户端是否有现成的解决方案?
更新:在使用 Py3 进行了大量工作之后,包括编写我自己的异步 Web 服务器(在 Dave Beazley 的演示之后),我终于抛弃了 Python(以及我的一大堆代码)-:转而支持在NodeJS上运行的CoffeeScript。看看:GitHub(现在你可以在其中找到 95% 的有趣代码)、npm(对用户不友好的包管理器;很好摆脱,你从来没有辜负你的名字),一个疯狂的巨大的模块存储库(几乎 24/7 发布大量新内容),一个庞大而充满活力的社区,开箱即用的异步 HTTP 和文件处理......,所有这些(感谢V8)占三分之一光速easy_install
——有什么不喜欢的?阅读更多宣传:“脚本的未来”(幻灯片托管由SpreeWebdesign提供)。
我正在寻找一种以异步、非阻塞方式提供 HTTP(并执行 HTTP 请求)的方法。当您像我一样决定使用Stackless Python 3.1(另请参阅此处的文档)时,这似乎很难做到。
有一些基本示例,例如信息量很大且详细的文章How To Use Linux epoll with Python,还有一个名为stacklessexamples的 Google 代码项目,其中包含一些有价值的信息(但没有与 Python 3.x 兼容的代码)。
因此,经过多天的网络研究并尝试将我迄今为止发现的部分组合在一起:有人知道一个相当可用的异步 HTTP 库吗?它不必符合 WSGI(我对此不感兴趣)。
服务器部分应该能够服务多个非阻塞 HTTP 请求(并且可能进行 HTTP 标头处理的基础知识);HTTP 客户端部分应该能够以非阻塞方式通过 HTTP 请求检索 Web 内容(也进行基本的标头处理,但没有像授权这样的花哨的东西)。
到目前为止,我的研究表明,非阻塞 HTTP
是在无堆栈、协作调度的环境中唯一有意义的方法;
凭借标准库在 Stackless Python 3 中是可行的
select epoll
(在 Py2.6 中引入;一些解决方案更喜欢libevent
,但这意味着另一个障碍,因为pyevent 项目似乎已经停止在 Py2.5 开发);遗憾的是,它仍然不是家庭用品,大多数人都依赖于阻止 HTTP。
现在的样子,我必须学习套接字编程的基础知识并推出我自己的 HTTP 服务器/客户端库。我仍然回避这项任务,因为我在该领域的背景很少,并且注定要以这种方式“重复历史”。
我会很高兴任何相关的指针。我非常喜欢使用select.epoll
; 我似乎记得它比旧的更具可扩展性asyncore
(但也许有人对此有更精确的数据)。作为最低要求,解决方案应在 Ubuntu 9.10 上运行。
python - 使用无堆栈 python 的困难,无法写入字典
我有简单的 map-reduce 类型算法,我想在 python 中实现并利用多个核心。
我在某处读到,在 2.6 中使用本机线程模块的线程不使用多个内核。真的吗?
我什至使用 stackless python 实现了它,但是我遇到了奇怪的错误 [更新:快速搜索表明 stackless 不允许多个内核那么他们还有其他选择吗?
但是在上面的代码中,分配给标签的值,即字典中的更改丢失了。
上述传播函数用作 MicroThreads(即 TaskLets)的可调用函数
python - 使用 Stackless 的邮箱
在我的无堆栈应用程序中,我希望有 Erlang 样式的消息框队列。我不想强制发送 tasklet 在接收 tasklet 准备好接收之前被阻止,我希望发送 tasklet 在接收者的消息框中排队消息,并且能够在接收者处于睡眠状态时唤醒接收者。
发送 tasklet 应该能够发送消息然后继续执行,而不管接收 tasklet 的状态。
我确定有办法做到这一点,我只是还没有找到它......
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 - 产生 UDP 数据包的最快方法
我们正在构建一个测试工具来将二进制消息推送到 UDP 多播上。
原型使用 Twisted reactor 循环来推送消息,这几乎达到了我们需要的流量水平——大约每秒 120000 条消息。
我们的测试机器上有 16 个核心,显然我想将其分布在这些核心上,以真正让线束飞起来。
是否有人对我们如何构建应用程序(使用事件循环方法或 CSP 样式方法)以提高此输出有任何想法。
此外,原型中的大部分时间都花在写 UDP 上——作为 IO,我不应该感到惊讶,但我错过了什么吗?
欢迎任何想法。
c - 使用 C 来实现其他语言是否以任何方式限制了他们的设计?
似乎过去 20 年出现的大多数新编程语言都是用 C 编写的。这是完全有道理的,因为 C 可以被视为一种可移植的汇编语言。但我很好奇的是,这是否以任何方式限制了语言的设计。促使我提出问题的原因是考虑如何在 Python 中直接使用 C 堆栈来调用函数。显然,编程语言设计者可以用他们想要的任何语言做任何他们想做的事,但在我看来,你选择编写新语言的语言会让你处于某种心态,并给你一些难以忽视的捷径。这些语言的其他特征是否来自用该语言编写的(好或坏)?
python - CCP Stackless 演示文稿中的 BLUE 是什么?
在Eve 中的 Stackless Python 中,有一些关于 Python 中的“BLUE”对象的讨论。有人知道这项技术的详细信息吗?