应该将文件对象发送给sidekiq worker

时间:2015-02-17 13:42:04

标签: ruby csv ruby-on-rails-4 sidekiq

我想知道fileobject是否可以发送给sidekiq worker,我已经尝试过了,它工作正常,我关注性能,例如,如果我有一个1000行的CSV,那么我应该发送例如

的文件对象

SidekiqWorker.perform_async(params[:bulk_update_csv_file].read)

这种方法有效但由于文件由很多行组成,如果该文件对象应作为参数传递给sidekiq worker,我会关注性能。

我尝试过其他一些事情,比如使用

CSV.parse(params[:bulk_update_csv_file].read, headers: true)然后将对象切成大约500行,然后将包含500行的CSV解析器对象发送给sidekiq worker但我收到错误SystemStackError (stack level too deep):

我尝试过的另一种方法是将每一行转换为哈希值,然后将其发送给sidekiq worker,它也可以正常工作。很高兴知道这里最好的方法是什么,即使有10000行。

我的最后一招是保存文件并将路径的链接发送给sidekiq worker,但如果没有这种方法就可以完成。

1 个答案:

答案 0 :(得分:2)

来自Sidekiq Wiki

  

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

文件的内容为state,文件的路径为简单标识符。

结论:将路径发送到文件,让Sidekiq工作者读取文件。