问题标签 [ruby-thread]

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 投票
0 回答
96 浏览

ruby - 为什么 ruby​​ 会杀死正在运行的线程?

根据线程文档;当 Ruby 程序终止时,所有正在运行的线程都会被杀死,无论它们的状态如何。为什么 ruby​​ 不等待所有生成的线程首先终止?

0 投票
2 回答
340 浏览

ruby - 使用 API 的 Ruby 线程/分叉 (Sinatra)

我正在Sinatra为我的 API 使用 gem。我想要做的是在收到请求时处理它,返回响应并开始新的长时间运行的任务。

我是 Ruby 的新手,我读过关于 Threading 的文章,但不确定完成任务的最佳方法是什么。

这是我的sinatra终点

我将不胜感激任何建议或示例。

0 投票
1 回答
30 浏览

ruby - 如何同时或以较低优先级运行 REST 调用

我正在通过 REST 调用加载数据并呈现它。之后,我正在调用另一个 REST API,这大约需要 10 秒。在这段时间里,我不能再进行一次 REST 调用,直到这个调用完成。我的问题是,我该怎么做?

我尝试使用线程,但它不起作用,也许我做错了什么,或者线程不是正确的选择?

这是被调用的路线:

如何在“后台”的第 8 行到第 22 行内运行代码,以便其他调用具有优先级?

0 投票
1 回答
45 浏览

ruby - 用碘处理 AVL 消息

现在我正在为 Skypatrol TT8750+ 的消息开发某种解析器,并且我的线程 TCP 服务器正在工作。问题在于,如果同时连接多个设备,这不是一个好方法。我正在使用碘,但我无法使用给我的一些代码。我的目标是首先接收一个 33 字节的消息来识别设备,然后开始接收带有车辆信息的 86 字节的消息。

并且此错误出现在每条消息上

此外,这个实现没有得到我需要的消息这些是我从这个实现中得到的前两行:

这些是线程实现的前两行

0 投票
1 回答
222 浏览

ruby - Git Hook - Ruby 代码 - 交互式输入

我正在尝试从 git hook 执行代码(commit-msg hook)中获取输入。但是红宝石不能在输入点停止。并且它执行代码就好像输入就像一个 puts 语句。这是我尝试过但失败的代码。

有人请帮助我接受这个交互式输入,或者建议我一种编写 git 钩子的好语言。提前致谢。

0 投票
2 回答
615 浏览

ruby - 是否可以在 Ruby 中使用 IO.pipe 进行线程间通信?

在文档中的 RubyIO.pipe示例中,一条消息通过进程传递。

我想做类似的事情,但有两个不同:

  1. 使用线程而不是进程
  2. 使用管道进行持续消息传递,而不是一次性消息

这是显而易见但不起作用的代码:

这导致reader_thread挂起rd.read

我可以通过使用使其工作IO#read_nonblock

这是正确的模式吗?还是使用IO.pipe错误的工具进行线程消息传递?

0 投票
1 回答
366 浏览

ruby - 模块中的 Ruby 类需要访问包含类命名空间

我已经用 Ruby 编写了一个小应用程序,现在想向它添加一个简单的 API,以允许其他应用程序对其运行一些基本查询。

我一直在看 senatra,因为它看起来非常轻量级和简单。但我怀疑与其将 sinatra 添加到我的应用程序以提供 API,不如将应用程序编写为 sinatra 应用程序。

我现在的问题是我可以用一个简单的“你好!”来建立一个“瘦”服务器。端点,通过在我添加到我的应用程序对象的模块中定义它,如下所示:

通过调用 start_server() 方法,我可以将服务器作为后台线程启动。但是现在我有了端点,我希望它引用我添加了模块的类中的方法。

那么如何访问封闭类的命名空间呢?

例如

我已将模块添加到的类称为 StateMachine,它有一个方法:

如何从上面的“get”路由中调用此方法?

我发现了另一个似乎与此有关的帖子 -

从模块中访问类的包含命名空间

但这有点超出我的想象,我没有运气尝试调整给出的代码示例。

为了尝试澄清这一点,我有一个类,这里​​显示的是精简:

该类包括上面显示的模块 ApMessageIoModule。

StateMachine 类已被实例化,在我的单元测试中:

我目前在那里睡了很长时间,以允许我通过转到浏览器中的端点来手动确认服务器已启动。这样做会向我显示端点上预期的 Hello 消息。

查询状态方法与底层 sqlite3 数据库对话,该数据库已通过从 StateMachine 的初始化方法调用的各种方法创建和填充。为简洁起见,此处未显示。

因此,如果有意义的话,我想做的是从 ApMessageIoModule 模块中的 ApiServer 类中调用 StateMachine 实例中的该方法。

实际上,我认为这个便笺簿使它更清楚:

0 投票
1 回答
452 浏览

ruby - 如何使用 gdb 从不同的线程获取 ruby​​ 回溯

我有一个生成两个线程的 ruby​​ 程序。很少,它似乎挂在主线程上,我正在尝试使用 gdb 找出原因。

使用此处的博客文章,我使用 gdb 附加到进程,并调用rb_backtrace()以获取回溯。

问题是,回溯总是来自产生的工作线程之一,而不是我遇到挂起的主线程。

有没有办法从特定线程获取回溯?

我曾尝试使用 gdb 命令info threadsthread 2更改活动线程,但它没有效果。我也尝试过ruby_eval在 gdb 中使用定义,如此处所述但是每当我尝试评估一行 ruby​​ 代码时,我都会收到错误No symbol table is loaded. Use the "file" command. 因为我正在使用嵌入式系统,所以我无法轻松地使用 gdb 符号重新编译 ruby​​。

0 投票
1 回答
514 浏览

ruby-on-rails - 生产中的 Rails 线程限制

我正在开发超级喜欢/出租车预订应用程序。为此,我正在使用 Action Cable。创建新的订单服务器后,获取最近的 10 个司机的列表,并依次发送每个司机的订单详细信息(暂停 40 秒)。

生产模式下rails可以同时运行的线程数有限制吗?例如,如果 100 个用户将创建新订单。可以使用什么更优雅的解决方案?

0 投票
1 回答
519 浏览

ruby-on-rails - 升级到 Rails 5 后 Ruby 线程不工作

我有一个使用服务的 API,其中我使用 Ruby 线程来减少 API 的响应时间。我尝试使用以下示例共享上下文。它在 Rails 4、ruby 2.2.1 上运行良好

现在,我们已将 rails 升级到 5.2.3 和 ruby​​ 2.6.5。之后服务停止工作。我可以从控制台调用服务,它工作正常。但是通过 API 调用,服务一旦到达 CurrencyConverter.new 就会变得无响应。任何想法可能是什么问题?

如果我删除 CurrencyConverter.new(currency),那么一切正常。CurrencyConverter 是我拥有的服务对象。

发现问题 感谢@anothermh 提供此链接 https://guides.rubyonrails.org/threading_and_code_execution.html#wrapping-application-code https://guides.rubyonrails.org/threading_and_code_execution.html#load-interlock

根据博客,当一个线程通过评估适当文件中的类定义来执行自动加载时,重要的是没有其他线程遇到对部分定义常量的引用。

一次只能加载或卸载一个线程,并且要执行任一操作,它必须等到没有其他线程正在运行应用程序代码。如果一个线程正在等待执行加载,它不会阻止其他线程加载(事实上,它们会合作,并且在所有恢复一起运行之前依次执行其排队的加载)。

这可以通过允许并发加载来解决。 https://guides.rubyonrails.org/threading_and_code_execution.html#permit-concurrent-loads

谢谢大家的时间,我很感激。