gpt4 book ai didi

ruby - Rails - 美洲狮 worker 的并发问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:08:21 26 4
gpt4 key购买 nike

我有一个 Puma 服务器配置为使用两个工作线程,每个工作线程有 16 个线程。并禁用 config.threadsafe! 以允许使用 puma 进行线程处理。

现在我有一个代码,我怀疑它没有使用线程安全,即使我在那里使用了 Mutex 作为常量。我希望这段代码一次只由一个 puma 线程执行以避免并发问题,并为此使用 Mutex

现在,我的问题是,

  1. 在使用 puma 线程时,Mutex 是否可以在多个 worker 上注入(inject)线程安全?据我了解,worker 是一个单独的进程,因此 Mutex 将不起作用。
  2. 如果 Mutex 不能按上述方式工作,那么在特定代码上启用线程安全的解决方案是什么?

代码示例

class MyService
...
MUTEX = Mutex.new
...

def initialize
...
end

def doTask
MUTEX.synchronize do
...
end
end
end

最佳答案

MUTEX 对我不起作用,所以我需要找到另一种方法。请参阅下面的解决方案。

问题是,差异。 puma 线程同时向外部远程 API 发出请求,有时远程 API 需要时间来响应。

我想限制 API 请求的总数,但由于上述问题而无法正常工作。

为了解决这个问题,

  • 我已经创建了一个数据库表,当请求发送到外部 API 时,我将在其中创建一个新条目作为 in-pogress
  • 一旦该 API 响应,我会将条目更新为已处理
  • 在向外部 API 发出任何新请求之前,我正在检查具有进行中 的请求总数。

这样,我就可以限制从我的系统到外部 API 的请求总数。

关于ruby - Rails - 美洲狮 worker 的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com