Вы, вероятно, хотите хранить данные в каком-либо сообщении на основе схемы, используя что-то вроде Avro или Буферы протокола .Оба могут генерировать код, который можно использовать для сериализации и десериализации сообщений в Java / Scala и Python.
Например, в буферах протокола вы можете создать сообщение в файле image.proto
:
syntax = "proto3";
message Images {
bytes images = 1;
}
Вы можете сгенерировать код Python для этого с помощью компилятора protoc:
$ protoc -I=. --python_out=. image.proto
В Python3, чтобы добавить изображения, сериализовать сообщение и отправить его, вы должны сделать следующее:
import image_pb2
from google.cloud import pubsub_v1
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(<project name>, <topic name>)
def send_images(images):
img_msg = image_pb2.Images()
for i in images:
img_msg.images.append(i)
msg_data = img_msg.SerializeToString()
message_future = publisher.publish(topic_path, data=msg_data)
print(message_future.result())
Чтобы получить изображения и обработать их:
import image_pb2
from google.cloud import pubsub_v1
def receive(message):
images = image_pb2.Images()
images.ParseFromString(message.data)
for i in images.images:
# Process the image
message.ack()
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(<project name>, <subscription name>)
subscribe_future = subscriber.subscribe(subscription_path, receive)
print(subscribe_future.result())