Я извлекаю некоторую информацию о генах из базы данных, сохраняю ее в словаре после некоторых модификаций и добавляю в файл CSV.
Общее количество генов составляет 489299, поэтому в конце у меня будет файл csv с 489299 строками, сценарий будет работать гладко, когда я проверил его на 10000 генах, но в случае 489299 я получил ошибку:
OSError: [Errno 24] Слишком много открытых файлов: 'output_agrold / Genes.csv'
Вот фрагмент кода, который я использую:
# I have batches of Genes
batches = ["Gene1 Gene2...", "Gene11 Gene12..."]
for batch in batches:
genes_batch_dico = create_genes_info_dico(batch)
# genes_batch_dico is a List of dictionnaries which has info about genes
# genes_batch_dico = [{info about gene1}, {info about gene2}, ...]
for gene_dico in genes_batch_dico:
# I get info from gene_dico : gene_id, start_pos, end_pos .....
# here I create the CSV file
with open(OUTPUT_PATH + '/Genes.csv', 'a') as f:
w = csv.writer(f, delimiter=',', quoting=csv.QUOTE_ALL, quotechar='\"')
row = [ gene_id, start_pos, end_pos .... ]
w.writerow(row)
Я проверил количество строк в файле CSV, которое составило 52800 строк.
Когда я посмотрел в интернете, я обнаружил, что эта ошибка связана с одновременным открытием множества файлов (что, по-моему, я здесь не делаю, я имею в виду, что я добавляю / добавляю только один файл) и они предложили изменить максимальное количество открытых файлов с помощью команды ulimit -n NUMBER
, поэтому я увеличил open files
с 1024 до 4096. Но я все еще получаю ту же ошибку, когда число строк достигает ровно 52800 строк.
ОС: Fedora 28.