#python代码如下

from celery import Celery
import subprocess

app = Celery('tasks',
broker='redis://localhost',
backend='redis://localhost')

@app.task
def add(x,y):
print("running...",x,y)
return x+y

@app.task
def run_cmd(cmd):
cmd_obj=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
return cmd_obj.stdout.read()


[python@qinhan file]$ python
Python 3.6.2 (default, Jan 10 2018, 16:15:47)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.>>> import task
>>> task.run_cmd('df')    #此条命令不会发送到celery后台
b'Filesystem              1K-blocks    Used Available Use% Mounted on\n/dev/mapper/centos-root   5232640 2481244   2751396  48% /\ndevtmpfs                   490308       0    490308   0% /dev\ntmpfs                      500680       0    500680   0% /dev/shm\ntmpfs                      500680    6968    493712   2% /run\ntmpfs                      500680       0    500680   0% /sys/fs/cgroup\n/dev/mapper/centos-home   2086912   33076   2053836   2% /home\n/dev/mapper/centos-var     975532  633120    342412  65% /var\n/dev/sda1                  508588  126972    381616  25% /boot\ntmpfs                      100136       0    100136   0% /run/user/0\n'
>>> task.run_cmd.delay('df')  #此条命令会发送到celery后台,celery后台报错not JSON serializable
<AsyncResult: 2c671a6b-be73-4f46-8b55-c58f0a05ed2f>
>>> 

#celery后台报错信息如下

Traceback (most recent call last):
File "/usr/local/python3/lib/python3.6/site-packages/celery/app/trace.py", line 434, in trace_task
uuid, retval, task_request, publish_result,
File "/usr/local/python3/lib/python3.6/site-packages/celery/backends/base.py", line 152, in mark_as_done
self.store_result(task_id, result, state, request=request)
File "/usr/local/python3/lib/python3.6/site-packages/celery/backends/base.py", line 309, in store_result
request=request, **kwargs)
File "/usr/local/python3/lib/python3.6/site-packages/celery/backends/base.py", line 652, in _store_result
self.set(self.get_key_for_task(task_id), self.encode(meta))
File "/usr/local/python3/lib/python3.6/site-packages/celery/backends/base.py", line 259, in encode
_, _, payload = self._encode(data)
File "/usr/local/python3/lib/python3.6/site-packages/celery/backends/base.py", line 263, in _encode
return dumps(data, serializer=self.serializer)
File "/usr/local/python3/lib/python3.6/site-packages/kombu/serialization.py", line 221, in dumps
payload = encoder(data)
File "/usr/local/python3/lib/python3.6/contextlib.py", line 99, in __exit__
self.gen.throw(type, value, traceback)
File "/usr/local/python3/lib/python3.6/site-packages/kombu/serialization.py", line 54, in _reraise_errors
reraise(wrapper, wrapper(exc), sys.exc_info()[2])
File "/usr/local/python3/lib/python3.6/site-packages/vine/five.py", line 178, in reraise
raise value.with_traceback(tb)
File "/usr/local/python3/lib/python3.6/site-packages/kombu/serialization.py", line 50, in _reraise_errors
yield
File "/usr/local/python3/lib/python3.6/site-packages/kombu/serialization.py", line 221, in dumps
payload = encoder(data)
File "/usr/local/python3/lib/python3.6/site-packages/kombu/utils/json.py", line 72, in dumps
**dict(default_kwargs, **kwargs))
File "/usr/local/python3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/local/python3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/python3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/usr/local/python3/lib/python3.6/site-packages/kombu/utils/json.py", line 62, in default
return super(JSONEncoder, self).default(o)
File "/usr/local/python3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable

间接处理方法,直接把数据转换为json格式(只是做测试用,可以忽略)

>>> r=b'Filesystem 1K-blocks Used Available Use% Mounted on\n/dev/mapper/centos-root 5232640 2481244 2751396 48% /\ndevtmpfs 490308 0 490308 0% /dev\ntmpfs 500680 0 500680 0% /dev/shm\ntmpfs 500680 6968 493712 2% /run\ntmpfs 500680 0 500680 0% /sys/fs/cgroup\n/dev/mapper/centos-home 2086912 33056 2053856 2% /home\n/dev/mapper/centos-var 975532 633208 342324 65% /var\n/dev/sda1 508588 126972 381616 25% /boot\ntmpfs 100136 0 100136 0% /run/user/0\n'

>>> import json

>>> r.decode()
'Filesystem 1K-blocks Used Available Use% Mounted on\n/dev/mapper/centos-root 5232640 2481244 2751396 48% /\ndevtmpfs 490308 0 490308 0% /dev\ntmpfs 500680 0 500680 0% /dev/shm\ntmpfs 500680 6968 493712 2% /run\ntmpfs 500680 0 500680 0% /sys/fs/cgroup\n/dev/mapper/centos-home 2086912 33056 2053856 2% /home\n/dev/mapper/centos-var 975532 633208 342324 65% /var\n/dev/sda1 508588 126972 381616 25% /boot\ntmpfs 100136 0 100136 0% /run/user/0\n'

 

>>> json.dumps(r.decode())
'"Filesystem 1K-blocks Used Available Use% Mounted on\\n/dev/mapper/centos-root 5232640 2481244 2751396 48% /\\ndevtmpfs 490308 0 490308 0% /dev\\ntmpfs 500680 0 500680 0% /dev/shm\\ntmpfs 500680 6968 493712 2% /run\\ntmpfs 500680 0 500680 0% /sys/fs/cgroup\\n/dev/mapper/centos-home 2086912 33056 2053856 2% /home\\n/dev/mapper/centos-var 975532 633208 342324 65% /var\\n/dev/sda1 508588 126972 381616 25% /boot\\ntmpfs 100136 0 100136 0% /run/user/0\\n"'

 

  

最终解决方法

#修改编码格式为utf-8from celery import Celery
import subprocessapp = Celery('tasks',broker='redis://localhost',backend='redis://localhost')@app.task
def add(x,y):print("running...",x,y)return x+y@app.task
def run_cmd(cmd):cmd_obj=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)return cmd_obj.stdout.read().decode("utf-8")

重启celerycelery -A task worker --loglevel=debug

#前端执行python脚本

[python@qinhan file]$ python
Python 3.6.2 (default, Jan 10 2018, 16:15:47)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import task
>>> task.run_cmd.delay('df')
<AsyncResult: b0d9d480-e51d-4304-9128-1b676d70d3fe>
>>> a=task.run_cmd.delay("df -h")

>>> a.get()
'Filesystem Size Used Avail Use% Mounted on\n/dev/mapper/centos-root 5.0G 2.4G 2.7G 48% /\ndevtmpfs 479M 0 479M 0% /dev\ntmpfs 489M 0 489M 0% /dev/shm\ntmpfs 489M 6.9M 483M 2% /run\ntmpfs 489M 0 489M 0% /sys/fs/cgroup\n/dev/mapper/centos-home 2.0G 33M 2.0G 2% /home\n/dev/mapper/centos-var 953M 619M 335M 65% /var\n/dev/sda1 497M 124M 373M 25% /boot\ntmpfs 98M 0 98M 0% /run/user/0\n'
>>>

#后台celery执行成功,不在报错not JSON serializable

[2018-01-12 10:26:27,236: DEBUG/MainProcess] | Worker: Hub.register Pool...
[2018-01-12 10:26:27,237: INFO/MainProcess] celery@qinhan ready.
[2018-01-12 10:26:27,238: DEBUG/MainProcess] basic.qos: prefetch_count->16
[2018-01-12 10:27:06,818: INFO/MainProcess] Received task: task.run_cmd[b0d9d480-e51d-4304-9128-1b676d70d3fe]
[2018-01-12 10:27:06,819: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7f02b051cd08> (args:('task.run_cmd', 'b0d9d480-e51d-4304-9128-1b676d70d3fe', {'lang': 'py', 'task': 'task.run_cmd', 'id': 'b0d9d480-e51d-4304-9128-1b676d70d3fe', 'eta': None, 'expires': None, 'group': None, 'retries': 0, 'timelimit': [None, None], 'root_id': 'b0d9d480-e51d-4304-9128-1b676d70d3fe', 'parent_id': None, 'argsrepr': "('df',)", 'kwargsrepr': '{}', 'origin': 'gen71158@qinhan', 'reply_to': '61d4cf29-4204-397e-854d-446c648c8b9e', 'correlation_id': 'b0d9d480-e51d-4304-9128-1b676d70d3fe', 'delivery_info': {'exchange': '', 'routing_key': 'celery', 'priority': 0, 'redelivered': None}}, b'[["df"], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]', 'application/json', 'utf-8') kwargs:{})
[2018-01-12 10:27:06,825: DEBUG/MainProcess] Task accepted: task.run_cmd[b0d9d480-e51d-4304-9128-1b676d70d3fe] pid:71152
[2018-01-12 10:27:06,842: INFO/ForkPoolWorker-1] Task task.run_cmd[b0d9d480-e51d-4304-9128-1b676d70d3fe] succeeded in 0.020323514996562153s: 'Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 5232640 2481252 2751388 48% /
devtmpfs 490308 0 490308 0% /dev
tmpfs 500680 0 500680 0% /dev/shm
tmpfs 500680 6968 493712 2% /run
tmpfs 500680 0 500680 0% /sys/fs/cgroup
/dev/mapper/centos-home 2086912 33056 2053856 2% /home
/dev/mapper/centos-var 975532 633120 342412 65% /var
/dev/sda1 508588 126972 381616 25% /boot
tmpfs 100136 0 100136 0% /run/user/0
'

 

转载于:https://www.cnblogs.com/qinhan/p/8274575.html

celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式...相关推荐

  1. kombu.exceptions.EncodeError: Object of type NewUser is not JSON serializable

    当时遇到一直解决不了,后来更新了一下就成功了,可能因为版本低的缘故 pip install --upgrade kombu 实在不行将celery也一起更新了

  2. python2.7web代码用python3.6运行时,浏览器发送请求报错TypeError: Object of type 'bytes' is not JSON serializable的解决办法

    浏览器的Cookie由Python 2代码设置.Python 3将cookie内容解释为字节字符串.只要清除浏览器cookie就好了.

  3. [转载] python-TypeError: Object of type ‘Decimal‘ is not JSON serializable 报错

    参考链接: Python-Json 4: 如何使Json数据格式更易读 class DecimalEncoder(json.JSONEncoder): def default(self, o): if ...

  4. python3运行报错:TypeError: Object of type ‘type‘ is not JSON serializable解决方法(详细)

    python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法(详细) 参考文章: (1)python3运行报错:T ...

  5. python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法

    报这个错的原因是因为json.dumps函数发现字典里面有bytes类型的数据,无法编码.解决方法:在编码函数之前写一个编码类,只要检查到了是bytes类型的数据就把它转化成str类型. 这个编码类代 ...

  6. shell文件管理jenkins构建过程---window环境下报错:找不到shell文件

    window环境下报错:找不到shell文件.查看jenkins本地文件,可以查看到shell文件: 检查job配置: 发现使用的是Execute shell; 这个项目只能在liunx下使用,在wi ...

  7. explode php 报错,ecshop在php5.4下报错怎么办

    ecshop在php5.4下报错的解决办法:1.打开"cls_template"文件,并修改"$tag_sel=array_shift(explode(' ',$tag) ...

  8. 记录ie下报XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。

    问题: 同样的调用接口,在谷歌是没有问题的,但是在ie下报错XMLHttpRequest: 网络错误 0x80070005, 拒绝访问. 1.分析: 对比了一下,相同的是接口传递参数错误导致报错, 传 ...

  9. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错

    已结贴√ 问题点数:20 回复次数:3 32位windows下可以运行的程序在64位linux下报错 filt.c在32位windows code:blocks 10.05下运行无任何异样. 传到64 ...

  10. 使用celery出现async的报错的解决方法

    使用celery出现async的报错的解决方法 参考文章: (1)使用celery出现async的报错的解决方法 (2)https://www.cnblogs.com/learn643794461/p ...

最新文章

  1. “不传递消息、不使用邻接矩阵、在边集上训练”: 从对比链接中蒸馏自知识:非消息传递的图节点分类...
  2. 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
  3. ubuntu18.04 mariadb start失败
  4. 四种方法使Map线程安全
  5. vue(2)子组件和页面组件
  6. OpenCASCADE:Modeling Algorithms模块几何工具之Intersections交叉
  7. 关于玻璃体捐献的想法
  8. Another Blog
  9. php和python-php跟python
  10. asp数据分页显示技术(上下页版)
  11. 域名访问html乱码,显示地址和域名解析时出现乱码
  12. 【原创工具】蓝牙串口无线烧写STM32程序的工具,支持HC-05和CC2541两种蓝牙模块
  13. 基于Springboot+Mybatisplus的学校学院门户学生就业指导管理系统
  14. 微信投票python脚本_微信投票python脚本
  15. [答疑]关于产品线:充气娃娃,苍井空,猩猩
  16. 商品档案,文具五金服装鞋帽酒店烟酒饰品,日用百货超市,批发零售进销存收银财务一体管理软件
  17. 人脸关键点检测PFLD论文解读
  18. Java - 过滤器有哪些作用和用法?
  19. 图片太多怎么办?教你怎么批量压缩图片大小
  20. 万豪国际集团公布新任首席执行官和总裁

热门文章

  1. linux apache配置虚拟主机,linux环境apache多端口配置虚拟主机的方法
  2. java排除文件夹某文件,.gitignore排除文件夹,但包括特定的子文件夹
  3. layui 自定义排序_layui使用心得
  4. nyoj 弹球II(数学 模拟)
  5. 【2019百度之星初赛三1002=HDU6714】最短路 2(spfa+思维)
  6. 【洛谷P1314】聪明的质检员(二分+前缀和+差分)
  7. 文件不能超过200k_为什么答题时上传的文件大小不允许
  8. pi币节虚拟服务器选哪种,Pi币节点云服务器
  9. 用计算机探索规律概括,《用计算器探索规律》优秀教学设计
  10. 多项式拟合,模型的复杂度以及权重的变化