我需要在进程中处理队列中的作业,并异步执行 IO。这很简单。问题是这些作业可以将其他项目添加到队列中。
我想我一直在摆弄这个问题太久了,所以我的大脑一片混乱——这应该不会太难。我不断想出一个非此即彼的情况:
- 队列可以异步执行作业,然后可以加入结果。
- 队列可以同步执行作业,直到最后一个完成并且队列为空。
我一直在摆弄从 EventMachine 和 Goliath(两者都可以使用EM::HttpRequest
)到赛璐珞(实际上从来没有用它来构建东西),以及使用 Fibers 编写枚举器的所有东西。不过,我的大脑已经炸了。
简单地说,我想要的是能够做到这一点:
items = [1,2,3]
items.each do |item|
if item.has_particular_condition?
items << item.process_one_way
elsif item.other_condition?
items << item.process_another_way
# ...
end
end
#=> [1,2,3,4,5,6]
...其中4、5和6都是处理集合中原始项目的结果,而7、8和9是处理4、5和6的结果。我不需要担心无限期处理队列,因为我正在处理的数据将在几次迭代后结束。
欢迎高层次的指导、评论、其他库的链接等,以及低层次的实现代码示例。