2017-06-11 1 views
0

C'est la première fois que je travaille avec Celery en Python 3. Pour me mettre les pieds dans l'eau, je renvoie une chaîne "c'était une tâche hello" suite à un travail et stockant ceci est une base de données Postgres. Quand j'accède au résultat de ma base de données c'est sous la forme d'un memoryview en Python et la base de données elle-même a la colonne résultat de celery_taskmeta comme type de données bytea (c'est aussi ce que Celery envoie à la base de données).Comment obtenir Celery renvoyer un objet json au lieu de bytea?

Voici ma config de céleri:

import os 

broker_url = os.environ.get('RABBITMQ_BIGWIG_TX_URL') 
worker_concurrency = 3 
result_backend = 'db+postgres://...' 
task_serializer = 'json' 
result_serializer = 'json' 
accept_content = ['json'] 

Pourquoi suis-je pas obtenir un résultat JSON stocké dans ma base de données? De plus, je ne peux pas décoder le bytea à JSON ou utf-8 texte, je reçois cette erreur:

voici à quoi il ressemble en octets: b'\x80\x04\x95\x1b\x00\x00\x00\x00\x00\x00\x00\x8c\x17"this was a hello task"\x94.'

commande

: json.loads(t.tobytes())

Résultat: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

Répondre

0

vous devez convertir des données d'octets en unicode

t.decode("utf-8") 
+0

J'ai essayé mais je reçois la même erreur: UnicodeDecodeError: codec « utf-8 » ca pas décoder octet 0x80 en position 0: octet de début invalide – exchez

+0

https://docs.python.org/3.5/library/stdtypes.html#bytes.decode vous pouvez utiliser 2ème paramètre pour supprimer l'erreur comme 't .decode ("utf-8", errors = "ignorer") ' – funphp