Назад | Перейти на главную страницу

Многопоточность Python не работает на сервере VPS

Я запускаю многопоточное приложение на 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 число - это процессорное время, «украденное» другими виртуальными машинами на том же хосте, из которого вы можете выяснить, какую долю процессора вы получаете.