Ruby 是否应将文件对象发送给sidekiq worker

Ruby 是否应将文件对象发送给sidekiq worker,ruby,csv,ruby-on-rails-4,sidekiq,Ruby,Csv,Ruby On Rails 4,Sidekiq,我想知道是否可以将fileobject发送给sidekiq worker,我已经尝试过了,效果很好,我关心性能,例如,如果我有一个包含1000行的CSV,那么我是否应该将fileobject发送给例如 SidekiqWorker.执行异步(参数[:批量更新\u csv\u文件].read) 这种方法是可行的,但由于文件由许多行组成,因此如果该fileobject应该作为参数传递给sidekiq worker,我会考虑性能 我试过其他一些方法,比如使用 CSV.parse(params[:bulk

我想知道是否可以将fileobject发送给sidekiq worker,我已经尝试过了,效果很好,我关心性能,例如,如果我有一个包含1000行的CSV,那么我是否应该将fileobject发送给例如

SidekiqWorker.执行异步(参数[:批量更新\u csv\u文件].read)

这种方法是可行的,但由于文件由许多行组成,因此如果该fileobject应该作为参数传递给sidekiq worker,我会考虑性能

我试过其他一些方法,比如使用

CSV.parse(params[:bulk\u update\u CSV\u file]。read,headers:true)
然后将对象切成大约500行,然后将包含500行的CSV解析器对象发送给sidekiq worker,但我收到一个错误
SystemStackError(堆栈级别太深):

我尝试过的另一种方法是将每一行转换成散列,然后将其发送给sidekiq worker,这也很好。如果知道这里最好的方法是什么,那就太好了,即使有10000行

我最后的办法是保存文件并将路径链接发送到sidekiq worker,但如果不使用此方法就可以完成,那就太好了。

来自:

不要将状态保存到Sidekiq,保存简单的标识符

文件的内容将是state,文件的路径将是一个简单的标识符


结论:发送文件路径,让Sidekiq工作人员读取文件。

保存文件并发送Sidekiq路径如何?是的,我也想到了,但那将是我最后的选择。因为你说你目前的方法有效,所以不清楚你在问什么。发送一个文件路径不能扩展到一台机器之外。@MikePerham这是真的,但在Redis中存储1GB文件意味着Redis将使用1GB的RAM来存储该文件,因为它是内存存储。我猜正确答案取决于服务器设置和文件大小。或者您使用特定于主机的队列,如下所述: