django将locals()传递给芹菜任务



我使用的是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()失败:定义slots而不定义getstate的类不能被pickle

所以我想也许我需要创建一个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')

现在我得到了这个错误:

对象的深度复制失败:对象new(cStringIO.StringO)不安全,请使用cStringIO.StringO。new[/strong>()

很明显我做错了,有什么想法吗?

必须序列化任务参数。

Celery默认使用Python pickle协议,但也支持json、yaml、msgpack或自定义序列化程序。

您尝试发送的对象无法进行腌制。你有可能让他们变得可挑剔,但最终——把当地人当作任务论据并不是一个好做法。

请参阅:http://docs.python.org/library/pickle.html

相关内容

  • 没有找到相关文章

最新更新