Я создал скрипт Python, который считывает данные из файла и извлекает из него необходимые данные, проблема в том, что скрипт занимает 37 секунд на моем процессоре i5 (Intel® Core (TM) i5-8300H @ 2.30)GHz), но это занимает 70 секунд на сервере с процессором (Intel® Xeon® CPU E5-2670 v2 @ 2,50 ГГц).
ЦП сервера имеет 40 ядер, поэтому он должен был выполнять задачу быстрее, чеммой ноутбук. Обе системы работают под управлением ОС Ubuntu 18.04.
Скрипт использует многопроцессорность, а сервер - моя другая система, он не находится под повышенной нагрузкой. На моем ноутбуке есть и SSD, и HHD (ОС установлена на SSD), но я поместил файл на жесткий диск, с которого скрипт считывает данные, а на сервере есть только жесткий диск. Размер файла составляет около 1 ГБ, и я проверил производительность с 1000 записями.
1) https://www.youtube.com/watch?v=0Q2wv6saL3Q - тестирование сценария на моем 40-ядерном сервере.
2) https://www.youtube.com/watch?v=hSInldq1uRY - тестирование того же скрипта на ее 8-ядерном компьютере
Следующий код выполняется в цикле for при чтении данных из файла 1 ГБ, а целевые методы используют красивый суп для извлечения данных из документа, которым я являюсьПолучение из файла.
t0 = multiprocessing.Process(target=get_domain, args=(record.url, processedData))
t1 = multiprocessing.Process(target=getTLD, args=(record.url, processedData))
t2 = multiprocessing.Process(target=geturlscheme, args=(record.url, processedData))
t3 = multiprocessing.Process(target=getAllemails, args=(soup, processedData))
t4 = multiprocessing.Process(target=getCanonicalURL, args=(soup, processedData))
t5 = multiprocessing.Process(target=getMetaKeyword, args=(soup, processedData))
t0.start()
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
t0.join()
t1.join()
t2.join()
t3.join()
t4.join()
t5.join()
Ниже приведены подробности о cps обеих систем с помощью команды lscpu:
Информация о ноутбуке
:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
Stepping: 10
CPU MHz: 800.023
CPU max MHz: 4000.0000
CPU min MHz: 800.0000
BogoMIPS: 4608.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Информация о сервере
root@ubuntu18:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Model name: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
Stepping: 4
CPU MHz: 1200.470
CPU max MHz: 3300.0000
CPU min MHz: 1200.0000
BogoMIPS: 5000.02
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-9,20-29
NUMA node1 CPU(s): 10-19,30-39
Пожалуйста, дайте мне знать, в чем может быть причина, я что-то упустил?
Спасибо