Asyncio vs. Gevent [закрыто]

Вы можете импортировать csv, а затем перебирать все файлы CSV, считывая их в список. Затем напишите список на диск.

import csv

rows = []

for f in (file1, file2, ...):
    reader = csv.reader(open("f", "rb"))

    for row in reader:
        rows.append(row)

writer = csv.writer(open("some.csv", "wb"))
writer.writerows("\n".join(rows))

Вышеупомянутое не очень надежное, поскольку оно не имеет обработки ошибок и не закрывает какие-либо открытые файлы. Это должно работать независимо от того, имеют ли отдельные файлы одну или несколько строк данных CSV в них. Также я не запускал этот код, но он должен дать вам представление о том, что делать.

2
задан Dan Gittik 18 January 2019 в 13:06
поделиться

1 ответ

«Простой» ответ из реального использования:

  1. Хорошая вещь о Gevent - вы можете исправлять вещи, что означает, что вы [теоретически] можете использовать синхронные библиотеки. То есть Вы можете исправить патч Джанго.
  2. Плохая вещь в gevent - не все могут быть исправлены, если вы должны использовать какой-либо драйвер БД, который не может быть исправлен, вы обречены
  3. Худшее в Gevent - это «волшебный». Количество усилий, необходимых для понимания того, что происходит с «patch_all», огромно, то же самое относится и к поиску / найму новых людей для вашей команды разработчиков. Что еще хуже - отладка кода на основе Gevent - это ад. Я бы сказал, почти такой же ад, как обратные вызовы, если не хуже.

Более поздний момент является ключевым, я думаю. Самая недооцененная вещь в разработке программного обеспечения состоит в том, что код предназначен для чтения , а не для написания , а не для эффективного выполнения (если позже это случится, вы бы предпочли перейти с языка Python на язык системного уровня). В Asyncio отсутствовала часть для асинхронного программирования - предопределенные и управляемые точки переключения контекста. Вы на самом деле пишете код синхронизации (то есть вы не думаете о внезапном переключении потоков, блокировках, очередях и т. Д.) И используете await ..., когда знаете, что вызов является блокировкой ввода-вывода, поэтому вы позволяете событию выбирать цикл на что-то еще, что готово к использованию процессора, и позже узнаем текущее состояние.

Это то, что делает asyncio таким хорошим - его легко поддерживать. Недостатком является то, что почти весь «мир» тоже должен быть асинхронным - драйверы БД, инструменты http, обработчики файлов. И иногда вам не хватает библиотек, это в значительной степени гарантировано.

0
ответ дан Slam 18 January 2019 в 13:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: