l'objet 'module' n'a pas d'attribut 'strptime' avec plusieurs threads Python

je reçois cette erreur 'module' object has no attribute '_strptime' mais seulement quand j'utilise plusieurs threads. Quand je n'en utilise qu'un, ça marche très bien. Im en utilisant python 2.7 x64. Ici, nous avons la fonction réduite que j'appelle

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

voici le traceback complet:

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

Exception in thread Thread-22:
Traceback (most recent call last):
  File "C:Python27x64libthreading.py", line 810, in __bootstrap_inner
    self.run()
  File "C:Python27x64libthreading.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'
17
demandé sur user1618465 2015-08-27 12:28:51

4 réponses

je viens de rencontrer ce problème précis. C'est une question difficile - m'a pris une heure pour le retrouver. J'ai essayé de lancer le shell et en entrant le code suivant:

import datetime

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

cela a bien fonctionné. Puis je l'ai essayé dans un fichier vide dans mon espace de travail. Cela a donné la même erreur que vous avez décrit. J'ai essayé de l'exécuter depuis la ligne de commande dans mon espace de travail. Lui a toujours donné l'erreur. J'ai ensuite lancé le shell depuis mon espace de travail. Cette fois, il a donné l'erreur dans l'environnement du shell. Comme il s'est avéré, n'importe quel répertoire autre que celui dans lequel j'étais fonctionnait très bien.

le problème était que mon projet était une application de calendrier python, et mon fichier principal s'appelait "calendar.py". Cela entrait en conflit avec une certaine importation native, créant ainsi l'erreur bizarre.

dans votre cas, je parierais n'importe quoi le problème est le nom de votre dossier: "file.py". Appelez ça autrement, et vous devriez être prêt à partir.

4
répondu thegiffman 2015-12-02 10:45:19

Le problème est décrit dans une liste de diffusion de message "filetage bug dans strptime".

datetime.strptime a un problème avec Python 2 threading module. La solution de contournement a suggéré il y a semble pour être à invoquer strptime = datetime.datetime.strptime avant le démarrage des threads.

8
répondu akshan 2017-03-28 06:57:09

je peux confirmer que le problème est lié à la multithreading, et il m'arrive de temps en temps quand j'utilise datetime.datetime.strptime en combinaison avec l' ThreadPool module.

j'ai pu corriger cela dans mon script en important le module "manquant" comme suit:

import _strptime
6
répondu chrki 2017-09-25 09:06:31

j'ai rencontré ce problème en testant un script qui travaillait sur Linux sur une machine Windows, et j'ai pu le corriger en ajoutant simplement une déclaration d'importation au haut du thread.

def multithreadedFunction():
    from datetime import datetime
    # Rest of the function

cela vaut probablement la peine d'essayer avant de modifier votre fonction pour ne pas utiliser le module datetime, puisque c'est une correction beaucoup plus rapide si cela fonctionne.

0
répondu Josh Jacobson 2018-06-18 17:45:22