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

Should file object be sent to sidekiq worker

我想知道是否可以将文件对象发送到 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 工作人员,但我收到错误 SystemStackError (stack level too deep):

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

我最后的办法是保存文件并将路径的 link 发送给 sidekiq worker,但如果没有这种方法也能做到这一点就好了。

来自Sidekiq Wiki

Don't save state to Sidekiq, save simple identifiers.

您的文件内容将是状态,文件路径将是一个简单的标识符。

结论:发送文件路径,让Sidekiq worker读取文件。