Стандартное вне добавления к ограничениям размера файла

udev - ваш друг. вы можете добавить файл под названием 99-gamepad.rules в /etc/udev/rules.d/

, который должен содержать строка, аналогичная следующей

DRIVER=="usb",ATTRS{idProduct}=="c52b",RUN+="/path/to/your_script.sh"

. Вы можете найти ATTRS , используя udevadm :

udevadm info -a -p /sys/bus/usb/devices/3-1.5

replace /sys/bus/usb/devices/3-1.5 , указав путь к вашему USB-устройству в sys; в качестве альтернативы вы можете использовать путь в / dev / . Обычно я просто пробую несколько путей, пока не найду что-то, что подходит моему устройству.

если вы знаете путь к устройству в / dev , то вы можете использовать следующую строку:

udevadm info -a -p $(udevadm info -q path -n /dev/input/js0)

Вот страница руководства udev, объясняющая, как написать правило.

Также посмотрите страницу udev в ArchWiki.

5
15.07.2018, 19:10
2 ответа

Я подозреваю, что >>вызывает у вас конкуренцию за файл nhtsa_vin_data.csvсреди команд curl, которые parallelразветвляются для сбора данных API.

Я бы поправил ваше приложение так:

$ cat p.bash
#!/bin/bash

cat vins.csv | parallel --will-cite -j10% --progress --tmpdir. --files \
   curl -s --data "format=csv" \
     --data "data={1}" https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/

Это даст вашим curlкомандам собственный изолированный файл для записи своих данных.

Пример

Я взял эти 3 номера VIN, 1HGCR3F95FA017875;1HGCR3F83HA034135;3FA6P0T93GR335818;, которые вы мне предоставили, и поместил их в файл под названием vins.csv. Затем я воспроизвел их несколько раз, чтобы этот файл имел эти характеристики:

VIN на строку
$ tail -1 vins.csv | grep -o ';' | wc -l
26
Количество строк
$ wc -l vins.csv
15 vins.csv

Затем я запустил свой скрипт, используя эти данные:

$./p.bash

Computers / CPU cores / Max jobs to run
1:local / 1 / 1

Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
local:1/0/100%/0.0s./pard9QD3.par
local:1/1/100%/10.0s./paruwK9L.par
local:1/2/100%/8.5s./parT6rCS.par
local:1/3/100%/7.3s./pardzT2g.par
local:1/4/100%/6.8s./parDAsaO.par
local:1/5/100%/6.8s./par9X2Na.par
local:1/6/100%/6.7s./par6aRla.par
local:1/7/100%/6.7s./parNR_r4.par
local:1/8/100%/6.4s./parVoa9k.par
local:1/9/100%/6.1s./parXJQTc.par
local:1/10/100%/6.0s./parDZZrp.par
local:1/11/100%/6.0s./part0tlA.par
local:1/12/100%/5.9s./parydQlI.par
local:1/13/100%/5.8s./par4hkSL.par
local:1/14/100%/5.8s./parbGwA2.par
local:0/15/100%/5.4s

Собираем вещи воедино

Когда все вышеперечисленное выполнено, вы можете catобъединить все файлы, чтобы получить один .csvфайл аля:

$ cat *.par > all_data.csv

Будьте осторожны при этом, так как каждый файл имеет свою собственную строку заголовка для содержащихся в нем данных CSV. Чтобы справиться с удалением заголовков из файлов результатов:

$ cat <(head -1 $(ls *.par|head -1)) <(tail -q -n +2 *.par) > all_data.csv

Снижение производительности

В ходе моего тестирования оказалось, что веб-сайт DOT ограничивает запросы, поскольку они продолжают получать доступ к своему API. Приведенное выше время, которое я наблюдал в своих экспериментах, хотя и было небольшим, уменьшалось по мере того, как каждый запрос отправлялся на веб-сайт API.

Моя производительность на моем ноутбуке была следующей:

$ seq 5 | parallel --will-cite --line-buffer 'yes {} | head -c 1G' | pv >> /dev/null
   5GiB 0:00:51 [99.4MiB/s] [                                                                                                                                                                  <=>       ]

ПРИМЕЧАНИЕ.:Вышеизложенное было заимствовано из ответа Оле Танге и изменено. Он записывает 5 ГБ данных через parallelи передает их на pv >> /dev/null. pvиспользуется, чтобы мы могли отслеживать пропускную способность канала и получать тип измерения МБ/с.

Мой ноутбук смог обеспечить ~пропускную способность 100 МБ/с.

Часто задаваемые вопросы по API NHTSA

API

For the ‘Decode VIN (flat format) in a Batch’ is there a sample on making this query by URL, similar to the other actions?

For this particular API you just have to put a set of VINs within the box that are separated by a “;”. You can also indicate the model year prior to the “;” separated by a “,”. There is an upper limit on the number of VINs you can put through this service.

Example in the box is the sample: 5UXWX7C5*BA,2011; 5YJSA3DS*EF

Source: https://vpic.nhtsa.dot.gov/MfrPortal/home/faq searched for "rate"

Выше упоминается, что существует верхний предел при использовании API:

There is an upper limit on the number of VINs you can put through this service.

Ссылки

3
27.01.2020, 20:38

Производительность обычно ограничивается одним из этих:

  1. Пропускная способность сети. Вы можете использовать sudo iftop, чтобы увидеть, используется ли ваше сетевое соединение на 100%.
  2. Задержка сети. Если серверу на другом конце требуется много времени для ответа, вы не увидите 100% использования пропускной способности.
  3. Дисковый ввод-вывод. Вы можете использовать iostat -dkx 1, чтобы увидеть, используется ли ввод-вывод любого из ваших дисков на 100%.
  4. ЦП. Вы можете использовать top, если ваши процессоры загружены на 100%. Нажмите 1, чтобы просмотреть отдельные потоки ЦП. Если один из них равен 100%, то у вас есть однопоточная программа, которая ограничена этим.

GNU Parallel хорошо справляется с параллельным выполнением заданий, чтобы использовать больше пропускной способности, дискового ввода-вывода и ЦП.

Но и у него есть свои ограничения.

GNU Parallel обычно кэширует вывод в /tmp. Это означает, что ваш дисковый ввод-вывод на /tmpможет быть узким местом.

К счастью, имея дело с CSV, вы редко заботитесь о порядке строк. :Это нормально, если строки смешиваются, если это полные строки.

Если вы используете --line-bufferиз версии >20170822, тогда GNU Parallel не буферизует вывод на диск -, а только одну полную строку в памяти. Для этого требуется немного больше ресурсов ЦП, поэтому проверьте, использует ли parallel100% ЦП. Если он использует меньше, значит, вы не попали в это узкое место.

$ cat vins.csv | parallel --line-buffer curl -s --data "format=csv" \
 --data "data={1}" https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/ \
  >> /nas/BIGDATA/kemri/nhtsa_vin_data.csv

Вы можете увидеть, есть ли локальное узкое место,:

$ seq 1000 | parallel --line-buffer 'yes {} | head -c 1G' | pv >> /nas/BIGDATA/test

На моем паршивом ноутбуке скорость составляет около 100 Мбайт/с. Так что мой паршивый ноутбук сможет работать с 1 Гбит/с от dot.gov.

3
27.01.2020, 20:38

Теги

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