Многопоточная обработка в Python 3 под Windows - PullRequest
1 голос
/ 29 февраля 2012

У меня есть задача обработки данных, написанная на Python, которая читает огромный CSV-файл с помощью программы чтения Python CSV, проверяет данные в каждом столбце, а затем записывает каждую строку в новый файл в другом формате.Затем данные массово загружаются в базу данных.Это создание нового CSV занимает около 60 минут, а продолжительность загрузки незначительна.

Я хотел бы ускорить создание CSV, и, поскольку задача связана с ЦП, очевидное решение будетпопытаться использовать все 12 ядер сервера и обрабатывать секции файла параллельно.

Я посмотрел на то, что доступно здесь: http://wiki.python.org/moin/ParallelProcessing, и, в частности, в библиотеке Parallel Python,кажется, это именно то, что мне нужно (http://www.parallelpython.com/content/view/17/31/), но ни один из них не работает с Python 3 / Windows.

Кто-нибудь знает о структуре параллельной обработки, которая бы отвечала моим потребностям, или любойдругой совет о том, как лучше всего добиться того, что я пытаюсь сделать, - я ищу что-то гибкое, но, надеюсь, избегая необходимости изобретать велосипед или разбираться с грязными деталями.

1 Ответ

3 голосов
/ 01 марта 2012

Вы можете использовать многопоточность, но тогда вы можете получить потоки, блокирующие GIL. И вам придется беспокоиться о блокировке.

Поэтому я предлагаю использовать встроенный многопроцессорный модуль , в частности объект " Pool ". По умолчанию пул будет создавать столько рабочих процессов, сколько у вас есть ядер.

В основном процессе создайте пул рабочих. Затем вы можете, например, использовать Pool.map_async() или Pool.imap(), чтобы применить функцию ко всем вашим данным, при условии, что они в итеративной форме. Объект Pool отслеживает беспорядочные детали для вас.

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