我正在使用python 2.7和django 1.27,我正在使用芹菜来完成任务。
我有这个观点
def my_view(request):
do_stuff()
local_1 = 1
local_2 = 4
celery_delayed_task(locals())
return HttpResponse('OK')
这导致了这种情况
传递locals()失败:无法定义 getstate 定义广告位的类
所以我想也许我需要创建一个locals()字典的副本,因为当视图不再存在时将调用该任务。
我试试这个:
def my_view(request):
do_stuff()
local_1 = 1
local_2 = 4
locals_dict = copy.deepcopy(locals())
celery_delayed_task(locals_dict)
return HttpResponse('OK')
现在我收到了这个错误:
显然,我做错了,有什么想法吗?对象的Deepcopy失败:object。 new (cStringIO.StringO)不安全,请使用cStringIO.StringO。 new ()
答案 0 :(得分:1)
必须序列化任务参数。
Celery默认使用Python pickle协议,但也支持json,yaml,msgpack或自定义序列化程序。
您尝试发送的对象无法进行腌制。你有可能让它们成为可选择的,但最终 - 作为任务参数传递当地人并不是一个好习惯。