问题标签 [genstage]
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.
erlang - 使用 Elixir Genstage 的运行时动态计算图
我希望能够在运行时动态更改计算管道,但似乎 GenStage 需要在编译时通过该subscribe_to: [...]
机制定义计算图。有没有办法创建动态计算图?例如在下面,我想在运行时在我的管道图中的“减 7”和“减 4”顶点之间切换。
这可能使用 GenStage 吗?我可能会拥有非常复杂的管道,因此我需要一个能够以复杂方式扩展以更改图形的解决方案,而不是临时解决方案,例如在这种情况下,将要减去的整数参数化。我希望能够添加或删除整个子树,在子树之间切换,并将节点添加到图中,包括将它们拼接到包括主树在内的任何子树的中间。
请参阅下面的编辑
这是最初的生产者:
这是生产者消费者之一:
这是最终消费者:
I 这一切都以Elixir School Genstage 教程为蓝本。
所有模块和 mix.exs 都可以在 github上找到。
在@AquarHEAD L 部分回答后 3 天后编辑。
我已经设法让运行时订阅正常工作。下面分别修改一些producer、producer_consumers、consumers:
制片人:
生产者_消费者:
消费者:
现在一旦这些都在 lib 目录中可用(记得添加 {:gen_stage, "~> 0.11"}
到你的 mix.exs deps),或者复制并粘贴到 IEX 中,那么以下将完美地工作:
现在的问题是,我仍然不知道如何取消订阅。有取消功能,也有停止功能。GenStage.stop(c)
例如似乎什么也没做,而我的各种尝试GenStage.cancel/3
只会给出错误。
回顾一下,我现在需要的是能够停止某些阶段并用其他阶段替换它们。取消订阅的语法是什么,从哪里调用它?由于没有具体示例,因此在文档中没有很好地解释。
erlang - 如何使 genserver 以频率值运行 Elixir
我见过很多 GenServer 实现,我正在尝试创建一个具有此类规范的实现,但我不确定它的 GenServer 用例。
我有一个状态,例如
我有这样的 100 个状态,具有不同的值,我的用例包含 5 个步骤。
- 将每个状态作为 Gen{ ? }。
- 向该 URL 发送 HTTP 请求。
- 得到结果。
- 发送另一个 HTTP 请求,其中的数据来自第一个请求。
- 让进程进入睡眠状态。如果频率为 10,则持续 10 秒,依此类推,10 秒后它将再次从 1 步开始。
现在,当我启动 100 个这样的 worker 时,将会有 100 * 2 个频繁的 HTTP 请求。我不确定我是否会使用 GenServer 或 GenStage 或 Flow 甚至是 Broadway?
我还担心 HTTP 请求不会崩溃,例如一个有状态的工作人员会发送一个请求,如果频率是在第一个请求返回之前 1 秒,另一个请求会被发送,GenServer 是否有能力足以处理这些案件?我认为这被称为背压?
我一直在询问和研究这个用例很长时间,我也被引导到 RabbitMQ 以及我的用例。
任何指导都会很有帮助,或者任何最小的例子都会非常感激。
? GenServer/GenStage/GenStateMachine