如何在固定的时间间隔内执行异步任务

时间:2018-01-11 06:11:59

标签: ruby asynchronous

目标是在不阻塞代码的情况下执行异步任务(文件读取,网络操作)。我们有多个这样的异步任务需要以固定的时间间隔执行。这是一个伪代码来演示相同的内容。

# the async tasks should be performed in parallel 
# provide me with a return value after the task is complete, or they can have a callback or any other mechanism of communication
async_task_1 = perform_async(1)

# now I need to wait fix amount of time before the async task 2
sleep(5)

# this also similar to the tasks one in nature
async_task_2 = perform_async(2)

# finally do something with the result

我正在读红宝石,我有2种选择分叉,穿线。这也称为Fiber。我还读到由于基本Ruby中的GIL,我将无法充分利用线程。我仍然想坚持基础Ruby。

我之前在OMP和Cuda中编写了一些并行代码。但我从来没有机会在Ruby中做到这一点。

你能建议如何实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

我会向你推荐concurrent-ruby宝石及其async feature。只要您的任务受IO限制,这将非常有用。 (正如你所说的那样)

您有执行任务的异步功能。要等待两次异步调用之间的时间间隔,您可以使用sleep函数

class AsyncCalls
  include Concurrent::Asnyc

  def perform_task(params)
    # IO bound task
  end
end

AsyncCalls.new.async.perform_task("param")
sleep 5
AsyncCalls.new.async.perform_task("other param")