|
|
@ -3,6 +3,9 @@
|
|
|
|
using Logging
|
|
|
|
using Logging
|
|
|
|
using Printf
|
|
|
|
using Printf
|
|
|
|
using Dates
|
|
|
|
using Dates
|
|
|
|
|
|
|
|
using CRC32c
|
|
|
|
|
|
|
|
using JSON
|
|
|
|
|
|
|
|
using Base.Threads
|
|
|
|
|
|
|
|
|
|
|
|
debuglogger = ConsoleLogger(stderr, Logging.Debug)
|
|
|
|
debuglogger = ConsoleLogger(stderr, Logging.Debug)
|
|
|
|
global_logger(debuglogger)
|
|
|
|
global_logger(debuglogger)
|
|
|
@ -62,6 +65,7 @@ end
|
|
|
|
function file_info(filename)
|
|
|
|
function file_info(filename)
|
|
|
|
_, ext = splitext(filename)
|
|
|
|
_, ext = splitext(filename)
|
|
|
|
info = stat(filename)
|
|
|
|
info = stat(filename)
|
|
|
|
|
|
|
|
crc = CRC32c.crc32c(open(filename, "r"))
|
|
|
|
m = Dict(
|
|
|
|
m = Dict(
|
|
|
|
"filename" => filename,
|
|
|
|
"filename" => filename,
|
|
|
|
"size" => info.size,
|
|
|
|
"size" => info.size,
|
|
|
@ -70,21 +74,76 @@ function file_info(filename)
|
|
|
|
"ctime" => info.ctime,
|
|
|
|
"ctime" => info.ctime,
|
|
|
|
"htime" => Dates.format(Dates.unix2datetime(info.ctime), "dd.mm.yyyy"),
|
|
|
|
"htime" => Dates.format(Dates.unix2datetime(info.ctime), "dd.mm.yyyy"),
|
|
|
|
"ext" => ext,
|
|
|
|
"ext" => ext,
|
|
|
|
|
|
|
|
"crc"=> Int(crc),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
return m
|
|
|
|
return m
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function file_meta(filename)
|
|
|
|
|
|
|
|
cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "$filename"`
|
|
|
|
|
|
|
|
out = read(cmd, String)
|
|
|
|
|
|
|
|
data = JSON.parse(out)
|
|
|
|
|
|
|
|
# println(data["format"]["duration"])
|
|
|
|
|
|
|
|
return out
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function check_file(filename)
|
|
|
|
function check_file(filename)
|
|
|
|
println(filename)
|
|
|
|
# println(filename)
|
|
|
|
meta = file_info(filename)
|
|
|
|
info = file_info(filename)
|
|
|
|
println(meta)
|
|
|
|
meta = file_meta(filename)
|
|
|
|
|
|
|
|
# println(info)
|
|
|
|
|
|
|
|
return meta
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
# -------- основная программа --------------
|
|
|
|
function parallel_execution()
|
|
|
|
dir = "d:\\vids\\ero"
|
|
|
|
nthreads = Threads.nthreads() # Получаем количество доступных потоков
|
|
|
|
@info "Обработка каталога: $dir"
|
|
|
|
println("Running parallel execution: $(nthreads)")
|
|
|
|
|
|
|
|
results = Vector{Int}(undef, nthreads) # Создаем массив для хранения результатов
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Создаем и запускаем потоки
|
|
|
|
|
|
|
|
for i in 1:nthreads
|
|
|
|
|
|
|
|
results[i] = Threads.@spawn begin
|
|
|
|
|
|
|
|
# Код, который нужно выполнить параллельно
|
|
|
|
|
|
|
|
return i * 2
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
files = readdir(dir, join=true)
|
|
|
|
# Получаем результаты из потоков
|
|
|
|
for file in filter(valid_file, files)
|
|
|
|
for i in 1:nthreads
|
|
|
|
meta = check_file(file)
|
|
|
|
println("Результат из потока $i: $(fetch(results[i]))")
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function main()
|
|
|
|
|
|
|
|
dir = "d:\\vids\\ero"
|
|
|
|
|
|
|
|
@info "Обработка каталога: $dir"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
files = readdir(dir, join=true)
|
|
|
|
|
|
|
|
n = length(files)
|
|
|
|
|
|
|
|
println("всего: $n files")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@time begin
|
|
|
|
|
|
|
|
@sync begin
|
|
|
|
|
|
|
|
for file in filter(valid_file, files)
|
|
|
|
|
|
|
|
@async begin
|
|
|
|
|
|
|
|
meta = @spawn check_file(file)
|
|
|
|
|
|
|
|
println(file)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# @sync begin
|
|
|
|
|
|
|
|
# for file in filter(valid_file, files)
|
|
|
|
|
|
|
|
# @async begin
|
|
|
|
|
|
|
|
# meta = check_file(file)
|
|
|
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
println("обработано")
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# -------- основная программа --------------
|
|
|
|
|
|
|
|
# parallel_execution()
|
|
|
|
|
|
|
|
main()
|
|
|
|