обработка данных в параллельном питоне - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть скрипт, части которого иногда могут работать параллельно.Python 3.6.6

Цель - максимально сократить время выполнения.

Одной из частей является подключение к Redis, получение данных для двух ключей, pickle.loads для каждого и возврат обработанных объектов.

Как лучше всего решить такие задачи?Я уже пробовал Queue(), но Queue.get_nowait() блокирует скрипт, и после {process}.join() он также останавливает выполнение, даже если задача выполнена.Использование pool.map повышает TypeError: can't pickle _thread.lock objects.

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

1 Ответ

0 голосов
/ 09 декабря 2018

cPickle.load() освободит GIL, так что вы можете легко использовать его в нескольких потоках.Но cPickle.loads() не будет, поэтому не используйте это.

По сути, поместите ваши данные из Redis в StringIO, а затем cPickle.load() оттуда.Сделайте это в несколько потоков, используя concurrent.futures.ThreadPoolExecutor.

...