Я запускаю многопоточное приложение на Python с несколькими процессами, которое собирает данные с некоторых веб-сайтов. При работе на моем локальном хосте он отлично работает, но на сервере vps, который я использую (Centos 5.8, 2,6 ГГц с 4 ядрами), работает очень медленно.
С помощью команды nethogs я получаю слишком низкое использование сети. Я получаю около 8 Кбит / с с 15 потоками. С другой стороны, на моем ПК я использую около 100–120 Кбит / с.
Я читал об ограничениях Python GIL и многопоточности. Кажется, что GIL никогда не снимает блокировку с VPS, хотя должен при выполнении операций ввода-вывода.
Есть ли какая-то конфигурация VPS, которую мне нужно изменить для правильной работы потоков?
ОБНОВИТЬ: На самом деле многопоточность работает, но проблема была в процессоре. 15 потоков было слишком много для него, и он стал слишком занят переключением потоков. Хотя vps утверждает, что это процессор с частотой 2,6 ГГц, я думаю, что на самом деле это не так. Есть ли способ измерить реальную скорость процессора в VPS?
Вы почти наверняка используете ЦП с другими VPS на том же хосте, поэтому вы не можете рассчитывать на такую же производительность, как у выделенного ЦП. GIL не ведет себя по-разному на разных процессорах, так что причина не в этом. Использовать top
для проверки загрузки ЦП на VPS; вас в основном интересует Cpu
строка вроде этого:
Cpu(s): 30.2%us, 7.8%sy, 0.0%ni, 41.0%id, 20.8%wa, 0.0%hi, 0.2%si, 0.0%st
С недавним гипервизором и ОС вы должны увидеть ненулевой st
число - это процессорное время, «украденное» другими виртуальными машинами на том же хосте, из которого вы можете выяснить, какую долю процессора вы получаете.