これは初めての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
をUnicodeにバイトデータを変換する必要があります0番地のバイト0x80をデコードしないでください:無効な開始バイト – exchez
https://docs.python.org/3.5/library/stdtypes.html#bytes.decode 2番目のパラメータを使用してエラーを抑制することができます 't .decode( "utf-8"、errors = "ignore") ' – funphp