GNU Parallel не использует все процессоры

У вас здесь две проблемы:

  1. Вы не можете ссылаться на псевдонимы столбцов в предложении where. Вместо этого вы должны повторить свои вычисления в предложении where
  2. Используйте функцию TIME() для извлечения временной части периода времени

. С учетом этих двух проблем, вы получите:

select
    f.fly_reg,
    TIME(f.start_tid) AS st,
    f.start_hight 
    FROM vbsk_dk_02.fab_master_flyvedata f 
where TIME(f.start_tid) between '12:00:00' AND '18:00:00'

. В качестве опции, если вам действительно не нужно значение времени в select, вы можете удалить его и просто иметь его в предложении where. Кроме того, вы можете использовать функцию HOUR(), если это подходит лучше. С этими двумя изменениями ваш запрос упростит:

select *
FROM vbsk_dk_02.fab_master_flyvedata
where HOUR(f.start_tid) between 12 and 18

, который много опережает:)

1
задан Hielke Walinga 18 March 2019 в 14:34
поделиться

1 ответ

Я не знаю, что program.py делает. Но очень редко можно использовать --pipe вместе с find. Поэтому я думаю, что это то, что вам нужно:

find data -type f | parallel -P 70 python program.py > output 

При --pipe вывод из find должен составлять не менее 70 МБ, чтобы 70 параллельных заданий выполнялись параллельно, поскольку по умолчанию --block-size равен 1 МБ :

find data -type f | parallel --pipe -P 70 python program.py > output 

Если program.py действительно читает имена файлов на stdin, то вам, вероятно, следует использовать --round-robin с меньшим --block:

find data -type f | parallel --pipe --block 1k --round-robin -P 70 python program.py > output

Это будет принимать входные данные из find и отдайте первый 1 КБайт на первую работу, 70-й КБайт на 70-ю работу и 71-й КБайт на первую работу.

0
ответ дан Ole Tange 18 March 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: