我想知道是否可以将 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(堆栈级别太深):
我尝试过的另一种方法是将每一行转换为哈希,然后将其发送给 sidekiq worker,这也能正常工作。很高兴知道这里最好的方法是什么,即使有 10000 行也是如此。
我最后的办法是保存文件并将路径的链接发送给 sidekiq worker,但如果没有这种方法也能做到这一点,那就太好了。
最佳答案
来自Sidekiq Wiki :
Don't save state to Sidekiq, save simple identifiers.
文件的内容是状态,文件的路径是一个简单的标识符。
结论:发送文件路径,让Sidekiq worker读取文件。
关于ruby - 文件对象是否应该发送给sidekiq worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562873/