Как параллелизированная программа Python смотрит с главной командой?

Существует больше проблем с этим сценарием. Бесполезное использование cat один из примеров. Если мы принимаем первое участие сценария, мы, возможно, записали это как

while read -r line; do echo "$line"; done < example.txt

Взятие if.. else часть, из чего использование awk {print $0}'

if [[ "$H_OR_T" == 'M$9001' ]]; then
 ....
 ....
fi

В этом случае '9 001 M$' взят буквально.

3
18.09.2017, 13:03
2 ответа

То, что вы видите в C, это использование потоков, поэтому использование процесса - это сумма всех его потоков. Если будет 4 потока со 100% использованием процессора каждый, то процесс покажет как 400%

То, что вы видите на питоне, это почти наверняка параллелизм через многопроцессную модель. Это модель, предназначенная для преодоления ограничений Python по многопоточности. Python может выполнять сам себя только по одному потоку за раз (см. Python Global Interpreter Lock - GIL). Для того чтобы сделать лучше, можно использовать многопроцессорный модуль, который в конечном итоге создаёт процессы, а не потоки, которые, в свою очередь, показывают в ps как многопроцессорные процессы, которые затем могут использовать до 100% CPU каждый, так как они (каждый) однопоточны.

Бьюсь об заклад, что при запуске ps -afeT вы увидите потоки программы на языке C, но не увидите дополнительных потоков для программы на языке python.

.
5
27.01.2020, 21:11

Ссылочная реализация Python, CPython, имеет глобальную блокировку интерпретатора (Global Interpreter Lock, GIL), которая не позволяет ему выполнять код в parallel, только concurrently. Поток полезен только для ввода/вывода. Для параллельного выполнения необходимо несколько процессов. Скорее всего, рассматриваемый код на языке Си вместо этого использует многопоточность для параллельности.

.
3
27.01.2020, 21:11

Теги

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