Tag: 异步

使用postgresql gem async

我正在使用Goliath (由eventmachine驱动)和postgres gem pg ,目前我正以阻塞的方式使用pg gem: conn.exec(‘SELECT * FROM products’) (例如)和我想知道是否有更好的方式连接到postgres数据库?

Ruby中的任务/未来

什么是模式的惯用Ruby模拟,表示可能延迟的异步计算,可以订阅它的完成? 即.NET System.Threading.Task或Python 3.x concurrent.futures.future 。 请注意,这并不一定意味着multithreading – “未来”对象的实际实现可能会使用其他方式来调度工作和获取结果,并且超出了问题的范围。 该问题严格地涉及呈现给对象的用户的API。

javascript中的非阻塞setTimeout vs ruby​​中的sleep

因此,在javascript中,因为它的性质是事件驱动的,所以似乎setTimeout不会阻塞。 这意味着如果我这样做: setTimeout(function(){ console.log(‘sleeping’); }, 10); console.log(‘prints first!!’); 它将输出’prints first!!’ 然后’sleeping’ 。 js解释器不会等到setTimeout完成,而是立即执行它下面的代码段。 当10ms通过时,它执行回调函数。 现在我最近一直在玩ruby。 我知道它在事件机器库中具有非阻塞支持。 但是我想知道我们是否可以实现类似于setTimeout的例子我刚刚用javascript写入sleep或ruby中的任何函数而没有事件机器支持? 这是否可能使用闭包过程或块或任何东西? 谢谢。

使用异步sinatra流多个身体

我想从javascript开始一个很长的轮询请求,这很好,我希望我的ruby编程将多个主体部分流式传输到javascript。 为什么以下(伪)代码不起作用? require ‘rubygems’ require ‘sinatra/async’ require ‘eventmachine’ require ‘thin’ require ‘json’ class Test [ “this is part #{c}” ] }.to_json end end end run! end 也许我误解了长期轮询和异步应该做什么,但我的期望是我将多个机构送回客户端? 我需要使用eventmachine吗? 谢谢

ruby中的并行HTTP请求

我有一系列的URL,我不想打开每个URL并获取一个特定的标签。 但我想并行地做这件事。 这是我想要做的伪代码: urls = […] tags = [] urls.each do | url | fetch_tag_asynchronously(url)do | tag | 标签<<标签 结束 结束 wait_for_all_requests_to_finish() 如果这可以以一种美妙而安全的方式完成,那将是非常棒的。 我可以使用线程,但它看起来不像数组在ruby中是线程安全的。

在基于EventMachine的应用程序中读取文件的最佳方法是什么?

为了不阻止反应器,我想异步读取文件,但我发现使用EventMachine没有明显的方法。 我尝试了几种不同的方法,但没有一种感觉正确: 只是阅读文件,它会阻止反应堆,但到底是什么,它不是那么慢(除非它是一个大文件,然后它肯定是)。 打开文件进行读取,并在每个刻度线上读取一个块(但读取多少?太多,它会阻塞反应堆,太少,读取速度会慢于必要)。 EM.popen(‘cat some/file’, FileReader)感觉非常奇怪,但比上面的替代方案效果更好。 结合LineAndTextProtocol它可以非常快速地读取线条。 EM.attach ,但我还没有找到任何如何使用它的例子,我在邮件列表上发现的唯一一件事就是它被弃用了… EM.watch ,我没有找到如何用于阅读文件的例子。 如何读取EventMachine反应器循环中的文件?

异步发出多个HTTP请求

require ‘net/http’ urls = [ {‘link’ => ‘http://www.google.com/’}, {‘link’ => ‘http://www.yandex.ru/’}, {‘link’ => ‘http://www.baidu.com/’} ] urls.each do |u| u[‘content’] = Net::HTTP.get( URI.parse(u[‘link’]) ) end print urls 此代码以同步方式工作。 第一个请求,第二个,第三个。 我想异步发送所有请求并在完成所有请求后打印urls 。 最好的办法是什么? 纤维适合那吗?