Как выбрать типы методов класса Python (т.е. для многопроцессорности)?

Как распарить типы методов класса Python? Он не реализован в стандартной библиотеке. Я обнаружил, что могу использовать некоторые сторонние модули, такие как dill, но как это сделать только с рассолом.

Я подготовил тестовый код, чтобы упростить этот вопрос:

import pickle

class Thing(object):
  @staticmethod
  def static_method():
    print Thing.static_method.__name__

  @classmethod
  def class_method(cls):
    print cls.class_method.__name__

  def object_method(self):
    print self.object_method.__name__


def main():
  items = [Thing,
           Thing(),
           Thing.static_method,
           Thing.class_method,
           Thing.object_method,
           Thing().object_method]
  for i, item in enumerate(items):
    try:
      pickle.loads(pickle.dumps(item))
    except Exception as ex:
      print i, ex, item

if __name__ == '__main__':
  main()

Как бороться с отсутствием поддержки pickle по умолчанию для методов в Python 2.7?

2 Can't pickle <function static_method at 0x025614F0>: it's not found as __main__.static_method <function static_method at 0x025614F0>
3 can't pickle instancemethod objects <bound method type.class_method of <class '__main__.Thing'>>
4 can't pickle instancemethod objects <unbound method Thing.object_method>
5 can't pickle instancemethod objects <bound method Thing.object_method of <__main__.Thing object at 0x024F71D0>>

person Chameleon    schedule 20.02.2015    source источник
comment
Вы видели этот очень похожий вопрос?: stackoverflow.com/questions/9470403/pickling-class-method   -  person ajdigregorio    schedule 20.02.2015
comment
Я dill автор. Зачем придерживаться pickle, когда dill может замариновать все ваши items?   -  person Mike McKerns    schedule 20.02.2015
comment
Если это потому, что вы хотите использовать multiprocessing, вы можете просто использовать мою вилку multiprocessing под названием pathos.multiprocessing. Он использует сериализатор dill, поэтому вы можете отправить любой из ваших items в функцию map. Например, см. stackoverflow.com/questions/1816958/   -  person Mike McKerns    schedule 20.02.2015
comment
@MikeMcKerns Я чувствую, что укроп слишком велик, чтобы решить эту проблему (стоимость загрузки + потерянная память) - я могу выбрать некоторый код из укропа и использовать, но не хочу загружать все, поскольку требуется только некоторая функция - я думаю, что это будет 1% от 100%.   -  person Chameleon    schedule 20.02.2015
comment
@paintedcones Я прочитал ответ, но не нашел его полезным - я нашел несколько лучших ответов, но не решил проблему @staticmethod.   -  person Chameleon    schedule 20.02.2015
comment
@MikeMcKerns Я буду тестировать и пробовать dill, но не думаю, что это хорошо, потому что мои ограничения и не уверен, что это Чистый питон - это отличная работа, независимо от того, какой код нужно немного очистить / задокументировать, чтобы сделать эту библиотеку более популярной, это мое впечатление на первый взгляд .   -  person Chameleon    schedule 20.02.2015
comment
@MikeMcKerns Я делаю тест, и он генерирует около 7M + 0,45 с - время в порядке. и использование памяти высокое, что бы это ни было. для многих приложений dropbox .com/s/bjrkxw2sfzwfuns/   -  person Chameleon    schedule 20.02.2015
comment
Это чистый питон. Я также очень хорошо осведомлен о снижении времени загрузки, поскольку я в основном использую dill как средство для обеспечения высокопроизводительных параллельных и распределенных вычислений в python. Использование памяти немного велико изначально, потому что он создает и регистрирует (в реестре pickle) минимальную версию многих объектов стандартной библиотеки. Дополнительная память, потребляемая после импорта, минимальна.   -  person Mike McKerns    schedule 20.02.2015
comment
@MikeMcKerns Очень хорошо, что это чистый Python. Я изучаю библиотеку. Я думаю, что время загрузки в порядке. но для некоторых применений требуется много памяти (если у вас есть высокомасштабируемый сервер с потоком, ограниченным 128 МБ, чтобы обслуживать больше пользователей с исключенными ответами 1), и нет проблем, если вы используете его на ПК. Я предпочитаю библиотеки с загрузкой по требованию, поскольку, если вы соедините много вещей с инициализацией, сумма будет превышать 1 с, что вообще не является проблемой для научных приложений или массовой обработки.   -  person Chameleon    schedule 20.02.2015
comment
@MikeMcKerns Могу ли я извлечь некоторый код из вашей библиотеки и для облегченной версии укропа и использовать его в коммерческом приложении? Я могу поделиться кодом через GitHub, если это необходимо, или сообщить о некоторых ошибках укропу. Что бы мне ни понадобилось, легкая библиотека для ускорения кода. Ваша лицензия поддерживает это?   -  person Chameleon    schedule 20.02.2015
comment
Это лицензия BSD. Имейте это. Он уже используется в коммерческих целях. Пожалуйста, сообщайте об ошибках и делитесь кодом через github.   -  person Mike McKerns    schedule 20.02.2015
comment
@Mike McKerns Единственная ошибка, которую я наблюдаю, не обрабатывает __class_mangled, что помечено для fixme. Я смотрю, что это легко исправить. Я обнаружил, что упрощу многопроцессорную обработку с помощью обратного вызова, поэтому я пробую шаблон map/task/reduce - поэтому класс будет вызывать некоторую глобальную защиту, используя self в качестве параметра - это позволит хорошее наследование, и код будет легким, что мне нравится.   -  person Chameleon    schedule 22.02.2015