Как отключить многопоточность?

Я бы предложил использовать supervisord . Я использую jupyterhub через supervisord.

Supervisord порождает вашу программу как дочернюю, и вы можете настроить ее на перезапуск в случае ее смерти, чтобы служба всегда была в рабочем состоянии. У него есть несколько вариантов конфигурации, но все довольно просто. У вас даже может быть http-интерфейс, из которого вы можете останавливать или запускать программы, которые он хранит.

Базовое определение вашей программы в supervisord.conf будет выглядеть следующим образом.

[program:ipython_notebook]
command=/usr/local/bin/ipython notebook --ip 0.0.0.0 --port 8080
stderr_logfile = /var/log/supervisord/ipython_notebook-stderr.log
stdout_logfile = /var/log/supervisord/ipython_notebook-stdout.log

Systemd

Я также пытался сделать это с помощью systemd, и это то, что я придумал.

Создайте файл: /etc/systemd/system/ipython.service. Содержимое файла:

[Unit]
Description=IPython
After=network.target

[Service]
TimeoutStartSec=0
ExecStart=/usr/local/bin/ipython notebook --ip 0.0.0.0 --port 8080

[Install]
WantedBy=multi-user.target

Я не проверял все параметры ipython notebbok, но должен быть тот, который позволяет указать ваш дом. Если не параметр, то наверняка вы можете найти его в ptofile. Вы также должны добавить это.

Затем вам нужно включить службу:

systemctl enable /etc/systemd/system/ipython.service

и запустить ее:

systemctl start ipython.service

Я не совсем уверен, но, увидев, что это WantedBy multi-user.target, вы должны включить ее после перезапуска системы, но я новичок в systemd, поэтому могу ошибаться :)

2
24.04.2018, 20:59
3 ответа
tr ',' ':' <test1.txt | xargs -P 4 -I XX ruby test.rb "http://XX/"

Предположим, что файл test1.txtсодержит строки вида

127.0.0.1,80
127.0.0.1,8080

, тогда trизменит это на

127.0.0.1:80
127.0.0.1:8080

и xargsбудут брать строку за раз и заменять XXв заданной командной строке содержимым строки и запускать команду. С -P 4мы получаем максимум четыре одновременных процесса.

Если в вашем файле есть запятые в конце каждой строки, сначала удалите их:

sed 's/,$//' test1.txt | tr ',' ':' | xargs...as above...

или даже

sed -e 's/,$//' -e 'y/,/:/' test1.txt | xargs...as above...
4
27.01.2020, 22:02
Варианты

gnu-parallelи xargsгораздо лучше, но для демонстрации того, как это сделать с помощью цикла while, я вижу два основных варианта:

Делать все одновременно:

while IFS="," read  ip port; do
    ruby test.rb "http://$ip:$port/" <&- &
done <test1.txt

Ограничьтесь двумя за один раз:

while IFS="," read  ip port; do
    ruby test.rb "http://$ip:$port/" <&- &
    IFS=, read ip port || break
    ruby test.rb "http://$ip:$port/" <&- &
    wait
done <test1.txt

Второй вариант далеко не идеален, так как между завершением одного процесса и завершением второго будет мертвое время, и эта проблема усугубляется по мере добавления новых процессов. Вы можете попытаться исправить это в оболочке, но так как xargsи parallelуже существуют, в этом нет особого смысла.

0
27.01.2020, 22:02

Я бы сделал так:

parallel --colsep, ruby test.rb {3}://{1}:{2}/ :::: ipport.txt ::: http https

По умолчанию будет выполняться одно задание на ядро ​​ЦП. Это можно настроить с помощью -j20для 20 параллельных заданий.

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

GNU Parallel — это универсальный распараллеливатель, который упрощает параллельное выполнение заданий на одном компьютере или на нескольких компьютерах, к которым у вас есть доступ по ssh.

Если у вас есть 32 разных задания, которые вы хотите запустить на 4 ЦП, прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:

Simple scheduling

GNU Parallel вместо этого порождает новый процесс, когда он завершается -, сохраняя активность ЦП и, таким образом, экономя время:

GNU Parallel scheduling

Установка

Из соображений безопасности рекомендуется использовать диспетчер пакетов для установить. Но если вы не можете этого сделать, вы можете использовать эти 10 секунд. установка.

При установке в течение 10 секунд будет предпринята попытка выполнить полную установку; если что не удается, персональная установка; если это не удается, минимальный установка.

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
   fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
12345678 883c667e 01eed62f 975ad28b 6d50e22a
$ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
cc21b4c9 43fd03e9 3ae1ae49 e28573c0
$ sha512sum install.sh | grep da012ec113b49a54e705f86d51e784ebced224fdf
79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
$ bash install.sh

Другие варианты установки см. в http://git.savannah.gnu.org/cgit/parallel.git/tree/README

.

Узнать больше

Скачать шпаргалку:http://www.gnu.org/s/parallel/parallel_cheat.pdf

Посмотреть другие примеры:http://www.gnu.org/software/parallel/man.html

Посмотрите вступительные видеоролики:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Прохождение обучения:http://www.gnu.org/software/parallel/parallel_tutorial.html

Подпишитесь на список рассылки, чтобы получить поддержку:https://lists.gnu.org/mailman/listinfo/parallel

5
27.01.2020, 22:02

Теги

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