Могут ли несколько программ Python безопасно открыть файл CSV для чтения одновременно? - PullRequest
0 голосов
/ 11 мая 2018

Я хотел бы одновременно читать большой CSV, используя несколько процессов, по одному на ядро ​​процессора. Каждому будет передано имя файла и смещение, и файл откроется с помощью

file_offset, lines_to_read = ... #Passed to each process

with open(filename, 'r') as f:
    f.seek(offset)

    for row_count, row in enumerate(csv.reader(f)):
        if row_count == lines_to_read:
            break

        do_stuff(row[0], row[1], ...)

Является ли проблемой открытие файла для одновременного чтения, а затем увеличение до определенных смещений с помощью seek, как это?

1 Ответ

0 голосов
/ 11 мая 2018

Да, множественные процессы могут читать из файла, не повреждая прочитанные данные.Один конкурирующий write может сделать недействительными все читатели.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...