У меня проблема с тем, что список набора данных pydicom (то есть изображений dicom) не может быть выбран, и я не уверен, почему.
Это вопрос, относящийся к pydicom - япопытался сначала опубликовать свой список рассылки google, но по какой-то причине сервер списка не работал - так что извините за публикацию здесь.
Я нахожусь на anaconda с последними обновлениями через conda (python 3.7.4, последний pydicom, macos)
У меня есть прога среднего размера, я пишу, что все отлично работает (6000 строк), и теперь я пытаюсь использовать multiprocessing
дляускорить это.Прога читает в исследовании, группирует его по сериям, а затем запускает набор тестов для каждой серии - так хорошо подходит для этого.
У меня все работает без проблем, когда я запускаю некоторые процессы с набором вызовов multiprocessing.Process()
.Я получил свои серии изображений в виде списка pydicom Dataset
, и я передаю этот список моей функции test_series()
с парой других параметров, ... все без проблем.
Но я просто пытался переключиться на использование multiprocessing.Pool()
вместо этого для удобства и облегчения доступа к возвращаемым значениям из моей функции test_series () (вместо использования очередей или каналов).
Однако pool.starmap()
вызвано в моем списке Dataset's
не удалось, потому что список не может быть рассортирован (в частности, каждый набор данных в списке не является).Мои знания Python до сих пор не очень помогают мне понять, почему, однако.
Я попытался диагностировать его, а) пытаясь pickle
на наборе данных , как только он прочитан издиск - проблем нет, в этом случае он будет хорошо мариноваться.б) используя 'get_unpicklable
' из stackoverflow , чтобы увидеть, что именно в наборе данных вызывает проблему.Когда я запускаю его на одном из моих наборов данных, я получаю следующее сообщение:
"[key type=DataElement]._value.type_constructor (Type 'function' caused: Can't pickle local object 'DataElement._convert_value.<locals>.<lambda>')",
"[val type=DataElement]._value.type_constructor (Type 'function' caused: Can't pickle local object 'DataElement._convert_value.<locals>.<lambda>')"
В своем коде я добавляю два атрибута - просто: <var>.file_name = new_value
:
- Я добавляюстрока «file_name» (это было до того, как я посмотрел на набор данных dict и увидел, что у него уже есть имя файла - doh
- Новый массив данных пикселей _scaled_pixel_data, который является _scaled_pixel_array, увеличенным вsize (я увеличил размер в 4 раза для своей обработки)
(PS - я не переклассифицировал набор данных pydicom, так как я новичок в python, и было быстрее добавить егоатрибуты вручную)
Нет проблем где-либо еще, а также нет проблем, когда я вызываю multiprocessing.Process (), передавая мой список в качестве аргумента - проблема возникает только при попытке использовать pool.starmap ()
Кто-нибудь знает, что случилось?
Должен ли я повторно классифицировать набор данных pydicom с двумя новыми атрибутами, а не просто добавлять атрибуты вручную?
спасибоза любую помощь! Ричард