Объект 'module' не имеет атрибута '_strptime' с несколькими потоками Python

Я получаю эту ошибку 'module' object has no attribute '_strptime', но только когда я использую несколько потоков. Когда я использую только один, он отлично работает. Я использую python 2.7 x64. Здесь у нас приведенная функция я вызывает

import datetime
def get_month(time):
    return datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+0000').strftime("%B").lower()

Вот полная трассировка:

AttributeError: 'module' object has no attribute '_strptime'

Exception in thread Thread-22:
Traceback (most recent call last):
  File "C:\Python27x64\lib\threading.py", line 810, in __bootstrap_inner
    self.run()
  File "C:\Python27x64\lib\threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\file.py", line 81, in main
    month=get_month(eventtime)
  File "C:\file.py", line 62, in get_month
    return datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S+0000').strftime("%B").lower()
AttributeError: 'module' object has no attribute '_strptime'

Ответ 1

Просто столкнулся с этой точной проблемой. Это сложный вопрос - мне потребовался час или около того, чтобы отследить его. Я попробовал запустить оболочку и ввести следующий код:

import datetime

print(datetime.datetime.strptime("2015-4-4", "%Y-%m-%d"))

Все прошло отлично. Затем я попробовал это в пустом файле в моей рабочей области. Это дало ту же самую ошибку, которую вы описали. Я попытался запустить его из командной строки в моей рабочей области. Все еще дала ошибку. Затем я запустил оболочку из своего рабочего пространства. На этот раз он дал ошибку в среде оболочки. Как оказалось, любой каталог, отличный от того, с которым я работал, работал отлично.

Проблема заключалась в том, что мой проект был календарным приложением python, а мой основной файл назывался "calendar.py". Это противоречило некоторому внутреннему импорту, создавая причудливую ошибку.

В вашем случае, я бы сказал, что проблема заключается в имени вашего файла: "file.py". Назовите это чем-то другим, и вам должно быть хорошо идти.

Ответ 2

Проблема описана в сообщении списка рассылки " ошибка потока в strptime".

datetime.strptime имеет проблему с модулем Python 2 threading. Обходной путь предположил, что кажется для вызова strptime = datetime.datetime.strptime перед началом любых потоков.

Ответ 3

Я могу подтвердить, что проблема связана с многопоточной обработкой, и иногда это происходит со мной, когда я использую datetime.datetime.strptime в сочетании с модулем ThreadPool.

Я смог исправить это в своем script, импортировав "отсутствующий" модуль следующим образом:

import _strptime