Django rest框架并行执行很多= True字段数据
问题描述:
我有一个序列化程序,因为我已经重写了validate
方法。Django rest框架并行执行很多= True字段数据
class ProcessItemSerializer(serializers.Serializer):
field1 = serializers.CharField(max_length=63)
# Few more fields
def validate(self, data):
# few data processing and HTTP calls
return data
我有使用上面作为串行字段many=True
class DataSerializer(serializers.Serializer):
items = ProcessItemSerializer(many=True)
如果我通过项的数据以DataSerializer
列表它将处理逐个每个项目另一个串行器。这是可取的!
但是如果物品的长度超过100则需要很多时间。我想要的是使用python-multiprocess并行执行20-20个项目集,以便减少总体时间。
我该如何在DRF中做到这一点。我必须重写什么方法?
答
您应该可以通过重写ListSerializer
并更具体地说是to_internal_value
方法来并行处理。
因此,它应该是这个样子:
class ProcessItemListSerializer(ListSerializer):
def to_internal_value(self, data):
....
class ProcessItemSerializer(serializers.Serializer):
field1 = serializers.CharField(max_length=63)
# Few more fields
class Meta:
list_serializer_class = ProcessItemListSerializer
def validate(self, data):
# few data processing and HTTP calls
return data
在to_internal_value
,你可能需要将代码复制开始直到for item in data:
有构建由大块验证...
这不是一个微不足道的任务。你能解释一下你正在做什么类型的验证?优化它会容易得多,而不是尝试任何形式的分布式处理。 –
使用IO处理多处理并不是一个好主意,你应该使用协同(gevent) – hadi
正确地提到@hadi,你的验证是I/O绑定的,所以多处理不会帮你太多。 –