文件对象是否应该发送给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读取文件。
我想知道是否可以将文件对象发送到 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读取文件。