Найдите плагин cpu-hogging в многопоточном Python

Ваша команда верна, если вы правильно указали исходный и целевой путь

Команда, которую вы отправили в своем вопросе, работает для меня при копировании файла из виртуальной машины Google Compute Engine на мой локальный компьютер.

$ gcloud compute scp vm1:~/.bashrc ~/Documents/
.bashrc                                          100% 3515     3.4KB/s   00:00

Я также попытался сделать копию с другой стороны (т.е. с моей локальной машины на виртуальную машину GCE), и она работает:

$ gcloud compute scp ~/Documents/.bashrc vm1:~/temp/
.bashrc                                          100% 3515     3.4KB/s   00:00

$ gcloud compute scp ~/Documents/.bashrc vm1:~/.bashrc-new
.bashrc                                          100% 3515     3.4KB/s   00:00

gcloud опирается на исполняемый файл scp, присутствующий в ваш PATH. Аргументы, которые вы передаете команде gcloud scp, передаются в двоичный файл scp. Предполагая, что ваши исходный и целевой путь верны, он должен работать.

Рекурсивное копирование с использованием scp

Однако, исходя из вашего конкретного сообщения об ошибке, я видел, что этот вариант появляется только тогда, когда исходный путь, из которого вы пытаетесь копировать, является каталогом, а не файлом. Для этого конкретного случая вы можете передать аргумент --recurse (аналогично аргументу -r, поддерживаемому обычным scp), который будет рекурсивно копировать все файлы и каталоги в указанном каталоге.

gcloud compute scp --recurse SRC_PATH DEST_PATH

8
задан Community 23 May 2017 в 12:16
поделиться

4 ответа

Как вы сказали, из-за GIL это невозможно в рамках одного процесса.

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

0
ответ дан 6 December 2019 в 00:58
поделиться

Если бы вы предлагали, поскольку у вас есть контроль над фреймворком, отключить все плагины, кроме одного, и посмотреть. В основном, если у вас есть плагины P1, P2 ... Pn запустите процесс N и отключите P1 вначале, P2 во втором и так далее

, это будет намного быстрее по сравнению с многопоточным запуском, так как GIL-блокировка отсутствует, и вы быстрее узнаете, какой плагин является виновником.

0
ответ дан 6 December 2019 в 00:58
поделиться

Очевидно, вам не нужна многопоточность, только параллелизм, потому что ваши потоки не имеют общего состояния:

Попробуйте многопроцессорность вместо многопоточности

Однопоточные / N подпроцессов. Здесь вы можете рассчитать время для каждого запроса, поскольку GIL не удерживается.

Другая возможность - избавиться от нескольких потоков выполнения и использовать сетевое программирование на основе событий (т.е. использовать витую версию)

3
ответ дан 6 December 2019 в 00:58
поделиться

Я бы еще посмотрел на предложение носкло. Вы можете профилировать в одном потоке, чтобы найти элемент, и получить дамп на очень долгом этапе, чтобы, возможно, увидеть виновника. Да, я знаю, что это 20 000 элементов, и это займет много времени, но иногда нужно просто уснуть и найти чертову штуку, чтобы убедить себя, что проблема обнаружена и решена. Запустите сценарий и займитесь чем-нибудь еще конструктивным. Вернитесь и проанализируйте результаты. Это то, что иногда отличает мужчин от мальчиков; -)

Или / И добавьте информацию журнала, которая отслеживает время выполнения каждого элемента, поскольку оно обрабатывается каждым плагином. Посмотрите на данные журнала в конце выполняемой программы и посмотрите, выполнение какой из них заняло ужасно много времени по сравнению с другими.

0
ответ дан 6 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

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