2014-12-03 3 views
0

В настоящее время существует проект Python с использованием gevent для отправки задач, выполняющих вызовы сокетов на один из наших вычислительных ресурсов. Программа python генерирует запросы почти 1000 объектов и выполняет их одновременно. Когда он получает запрос (поток строки фиксированной ширины), он записывает вывод прямо в файл и добавляет его в качестве результата задачи. Это уменьшает накладные расходы на память и перемещает вещи как можно быстрее.Как обрабатывать несколько задач одновременно, сохраняя порядок ввода и вывода?

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

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

ответ

0

Это очень простой подход, но может работать в рамках ограничений, которые вы указали. Однако он не использует gevent напрямую.

Запись вывода каждой задачи во временный файл, названный в соответствии с идентификатором (порядком) задачи. Когда все задачи завершены, прочитайте файлы в порядке и добавьте содержимое каждого в конечный выходной файл. Таким образом, содержимое только одной задачи выводится в память в любой момент времени.

+0

У меня есть этот вариант, и это имеет смысл. Я дам ему еще несколько дней, и если другие варианты не появятся, я отмечу это как ответ. – Carlos

+0

Учитывая отсутствие вариантов, я думаю, что отмечу это как свой ответ. Благодаря! – Carlos

Смежные вопросы