2017-06-11 3 views
0

これは初めてのPython 3でセロリを使って作業しています。足を濡らすために、ワーカーの結果として「これはこんにちはタスクです」という文字列を返しています。これはPostgresデータベースです。私のデータベースから結果にアクセスすると、Pythonのメモリビューの形式になります。データベース自体には、データ型byteaとしてのcelery_taskmetaの結果カラムがあります(これはCeleryがデータベースにも送信するものです)。セテリにbyteaではなくjsonオブジェクトを返すようにするにはどうすればよいですか?

これは私のセロリの設定です:

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'] 

は、なぜ私は私のデータベースに保存されているJSONの結果を得ていないのですか?また、私はJSONまたはUTF-8のテキストにはbyteaをデコードすることはできません、私はこのエラーを取得:

は、ここではそれがバイト単位で次のようになります。b'\x80\x04\x95\x1b\x00\x00\x00\x00\x00\x00\x00\x8c\x17"this was a hello task"\x94.'

コマンド:json.loads(t.tobytes())

結果:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

答えて

0
UnicodeDecodeError:「UTF-8」コーデックCA

あなたは私がこれを試みたが、私は同じエラーを取得

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

をUnicodeにバイトデータを変換する必要があります0番地のバイト0x80をデコードしないでください:無効な開始バイト – exchez

+0

https://docs.python.org/3.5/library/stdtypes.html#bytes.decode 2番目のパラメータを使用してエラーを抑制することができます 't .decode( "utf-8"、errors = "ignore") ' – funphp