问题标签 [celluloid]

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.

0 投票
1 回答
290 浏览

cucumber - 与 JRuby 并行运行 Cupes

我正在尝试从我的 gem 中并行运行黄瓜场景。从其他答案中,我发现我可以使用以下方法执行黄瓜场景:

当我一次运行一个场景时,上面的代码运行良好,但是当我使用赛璐珞或桃子之类的东西并行运行它们时,我得到了不明确的步骤错误。似乎我的步骤定义正在为每个并行测试加载,黄瓜认为我有多个相同类型的步骤定义。

有什么想法可以并行运行这些东西吗?

0 投票
1 回答
4580 浏览

ruby - 没有活动线程。僵局?

我有一组工人MessageConsumer,每个人都有不同的职责:HTTP 调用、CRUD Mongo/Redis、API 调用等。

它们具有相同的结构:

[worker-name].rb为每个工人都有一个文件,其中包括:

@queue.receive_message接收来自 Amazon SQS 的消息并调用传递消息的工作人员。

在每台服务器中,我们都有一组[worker-name].rb运行:

问题:我"No live threads left. Deadlock?"在运行进程一段时间后变得频繁(在让线程忙碌之后)。

ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-linux]在服务器中使用,不确定是否与 MRI 有关,也许我需要切换到 JRuby。但有趣的是,我认为这个问题并不常见,所以我认为这可能是我的实现问题。

有任何想法吗?

0 投票
0 回答
50 浏览

ruby - 工作在赛璐珞池中停止

我需要并行检索帐户数据。我为此使用赛璐珞

我的代码

在开始时,它总是对所有成员(鲍勃、爱丽丝等)进行并行请求。但一段时间后,它只向一个用户发出请求(例如,爱丽丝。)

PS在do_request使用的自制redis队列和Celluloid::Actor.registed所有账户中都存在

0 投票
2 回答
329 浏览

ruby - 为什么在 Celluloid::IO 中调用 sleep 时进程永远阻塞

Celluloid::IO用来做 DNS 查询,下面是我的代码:

此代码工作并在几秒钟内完成。但是当我添加该行时sleep 1(仅用于学习目的),在打印了一些结果后,进程永远阻塞了,这很奇怪。

谢谢你的帮助。

0 投票
1 回答
215 浏览

ruby - 赛璐珞池第一次叫死演员

每次我启动应用程序时,我第一次调用它时,它都会返回 Dead Actors。之后,它按预期返回。

然后我从我的控制器调用它BatchProcess.new.fetch(array_of_sites_to_parse)

我确实尝试将它放入@pool = BatchProcess.pool我的初始化程序中,它没有出错,但是每个请求都会成倍增长。

0 投票
1 回答
434 浏览

ruby - 赛璐珞的恶劣比赛条件

我有一个脚本,它生成用户指定数量的 IP 地址并尝试在某个端口上全部连接到它们。我在这个脚本中使用赛璐珞以实现合理的速度,因为同步扫描 2000 台主机可能需要很长时间。但是,假设我告诉脚本扫描 2000 个随机主机。我发现它实际上只扫描了大约一半的数字。如果我告诉它扫描 3000,我会得到相同的基本结果。如果我做 1000 个或更少,它似乎工作得更好,但即使我只扫描 1000 个主机,它通常最终也只能以相对一致性完成大约 920 个。我意识到生成随机 IP 地址显然会失败,但我很难相信每次都有大约 70 个不正确生成的 IP 地址。所以这里是代码:

大约一半的时间我得到这个:

D, [2014-09-30T17:06:12.810856 #30077] DEBUG -- : 终止 11 个演员... W, [2014-09-30T17:06:12.812151 #30077] WARN -- : 终止任务: type=:终结器,meta={:method_name=>: shutdown },status=:receiving Celluloid::TaskFiber 回溯不可用。Celluloid.task_class = Celluloid::TaskThread如果您需要回溯,请在此处尝试。

脚本什么也不做。其余时间(仅当我指定超过 1000 个时)我得到这个: http: //pastebin.com/wTmtPmc8

所以,我的问题是这个。如何避免竞争条件和死锁,同时仍然在这个特定脚本中实现我想要的?

0 投票
1 回答
527 浏览

ruby - 正确使用套接字和/或赛璐珞::IO

我有一个Pinoccio 微控制器(非常棒,试试吧)。微控制器为其服务器打开一个套接字。我正在一个 Ruby 应用程序中编写 TCP Socket 服务器,我将在其中使用Celluloid::IO。作为我的向导,我在 Node 中遵循这个实现,称为pinoccio-server

我写了一些测试代码,尝试与 Pinoccio 微控制器通信。我可以毫无问题地读取它,但是当我将数据写回套接字时,我永远不会得到我期望的行为。这是代码,有人可以告诉我我是否在滥用 Celluloid::IO 或套接字?

https://gist.github.com/roder/ab211f2f58ad6c90a3a9

0 投票
1 回答
161 浏览

ruby - 在 SupervisionGroup 中更改池大小

我可以在赛璐珞监督组中更改池大小吗?

例如我有一个工人:

然后我在一个监督组中提供 3 名工人:

我可以以某种方式修改池大小supervisor吗?

谢谢。

0 投票
1 回答
76 浏览

ruby - 红宝石赛璐珞:附加到已经在进行中的未来

给定一个赛璐珞 Actor 的实例,您可以使用future异步执行 Actor 方法,并在稍后的某个时间点使用 Future 的value方法来获取 Actor 方法的结果(必要时阻塞)。

假设我在一个系统中有两个独立的组件,它们都想使用相同的 Actor 方法,可能是非常昂贵的数据库查询。如果这两个组件都单独调用actor.future.expensive_query,则查询将被执行两次,每个调用者将获取自己单独的 Future 对象以检索结果。此外,这两个查询将连续执行,而不是同时执行。相反,如果我想进行第二次调用以actor.future.expensive_query获取对第一个调用者创建的 Future 对象的引用怎么办?赛璐珞可以做到这一点吗?

0 投票
1 回答
362 浏览

ruby - 赛璐珞::TimeoutError:超过 5 秒的链接超时

我正在使用 Jruby 1.7.12 和赛璐珞(0.16.0)。我的应用程序正在使用池并循环生成参与者

在我的库中,每个用户都是与经理相关联的演员,经理也是演员。我已经尝试完全消除链接,但问题仍然存在。当我创建超过 30 个用户 Actor 的那一刻,我的系统就会挂起。

似乎讨论了一些类似的超时错误,并提到了 JRuby 问题,但没有具体涉及链接超时问题。我无法弄清楚是什么导致了这个问题。

提前致谢。

整个代码库可在https://github.com/supersid/kaiwa获得

将不胜感激我能得到的任何帮助。