Python: объединение списков из разных файлов в параллельном или многопоточном - PullRequest
0 голосов
/ 01 октября 2018

Это мой первый вопрос здесь.Я начал изучать Python несколько дней назад, и у меня возникла проблема.

Я сделал несколько файлов Python, каждый из которых запускает цикл for и добавляет результаты в список.Таким образом, каждый файл имеет свой собственный список.

Например, file1.py создает список list1, а file2.py создает список list и т. Д. *

Моя цель - объединить все эти списки вместе, поэтомуя делаю отдельный файл "main.py" и импортирую имена списков, а затем объединяю их вместе следующим образом:

from file1 import list1
from file2 import list2
from file3 import list3

combined_lists = [*list1, *list2, *list3]

, и это работает нормально, как и ожидалось.

Но проблемаявляется то, что этот метод очень медленный, потому что он импортирует списки один за другим в последовательном порядке в порядке их импортирования.

Например, когда я запускаю его, он сначала импортирует список1, а когдаlist1 завершается, запускает list2, а затем list3 и т. д. и, наконец, объединяет их вместе.

Итак, поскольку у меня 400 списков в 400 различных файлах, это занимает очень много времени.

Есть ли способ импортировать и комбинировать все списки параллельно?

Как с многопоточностью или любым другим способом?

Обратите внимание, что мне не важен порядокпредметов в комбинацииНед список.

1 Ответ

0 голосов
/ 02 октября 2018

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

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

Однако ...

Я создал несколько файлов Python, каждый из которых запускает цикл for и добавляет результаты всписок.Таким образом, у каждого файла есть свой список.

Почему? Звучит так, что это намного сложнее, чем должно быть, но не зная, чего вы на самом деле пытаетесь достичь,невозможно сказать наверняка.

Без дополнительной информации, если у вас есть этот объем данных для обработки, кажется, что ваши скрипты должны генерировать файлы CSV (или они должны быть объединены в один скрипт, который генерируетодин файл CSV).Даже использование СУБД может быть лучшей идеей, чем восстановление этих наборов данных каждый раз, когда они импортируются, если только они не меняются очень часто.

...