-3

Итак, я запускаю несколько функций, каждая из которых занимает раздел из миллионного файла .txt. Каждая функция имеет цикл for, который проходит через каждую строку в этом разделе из миллиона файлов строк.Улучшите скорость при чтении очень больших файлов в Python

Он берет информацию с этих строк, чтобы узнать, соответствует ли она информации в 2 других файлах, одна около 50 000-100 000 строк, другая около 500-1000 строк. Я проверил, соответствуют ли строки, запустив циклы через другие 2 файла. После совпадения информации я записываю вывод в новый файл, все функции записываются в один и тот же файл. Программа будет производить около 2500 строк в минуту, но будет замедлять работу дольше. Кроме того, когда я запускаю одну из функций, она работает примерно 500 в минуту, но когда я делаю это с 23 другими процессами, она составляет всего 2500 минут, почему?

Кто-нибудь знает, почему это произойдет? Во всяком случае, я мог бы импортировать что-то, чтобы ускорить выполнение программы/чтение файлов, я уже использую метод with "as file1:".

Можно ли переделать несколько процессов, чтобы они работали быстрее?

+0

больше нить! = Быстрее. Это зависит от того, сколько ядер у вас есть – Whitefret

+0

, если все ваши данные могут поместиться в память, вы можете попробовать обработать свои данные с помощью модуля pandas - это очень быстро и очень эффективно. Не забывайте о самой медленной системе с диском ввода-вывода, это скорее всего будет вашим узким местом, а не количеством ваших потоков. – MaxU

+0

1. Сколько ядер у вас есть? 2. Какая доля общего процессора - этот процесс, используя (если он близок к 100%, то больше ядер не поможет). 3. Как потоки попадают в начало «своего» раздела? Если им сначала нужно прочитать строки * n *, я удивлен, что это не замедлит работу. –

ответ

0

Поток может использовать только ваши ресурсы. 4 ядра = 4 потока с полным ресурсом. Есть несколько случаев, когда больше потоков может повысить производительность, но это не относится к вам. Поэтому держите количество потоков в количестве ядер, которые у вас есть.

Кроме того, поскольку у вас есть одновременный доступ к файлу, вам нужна блокировка этого файла, что немного замедлит процесс.

Что может быть улучшено, однако, это ваш код для сравнения строки, но это другой вопрос.

+1

Вы хотите, чтобы четыре потока * обрабатывались *. Если они могут когда-либо застрять в ожидании ввода-вывода, вам нужно больше (чтобы поддерживать работу ядра). –

+0

@MartinBonner true, но я считаю, что его обработка намного длиннее, чем его запись в файл – Whitefret