Использование SqlAlchemy с RabbitMQ - PullRequest
0 голосов
/ 03 марта 2019

У меня есть веб-браузер, работающий на нескольких процессорах и пишущий в базу данных sqlite.Поскольку Sqlite не предназначен для обработки одновременных записей, я хочу использовать систему очередей, которая может обрабатывать несколько входов, и только 1 объект записывает в базу данных

Я прошел пример с RabbitMQ hello world и получил ошибку.

Мой send.py файл:

from models import TestCan
from models import TestJobs

import pika

# init_db()

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body=TestCan('Test'))

Файл models.py с TestCan:

class TestCan(Base):
    __tablename__ = 'test_can'
    id = Column(Integer, primary_key=True)
    name = Column(String())


    def __init__(self, name=None):
        self.name = name

    def __repr__(self):
        return '<Name: %s>' % (self.name)

Я получаю эту ошибку:

TypeError: object of type 'TestCan' has no len()

Что это значит?

1 Ответ

0 голосов
/ 04 марта 2019

Вы не можете публиковать объекты Python непосредственно в RabbitMQ, поскольку публикуемое вами сообщение является строкой.

Сначала вам нужно будет сериализовать и десериализовать объект, используя json.dumps и * 1004.* или pickle модуль.

Однако, если вы в порядке с введением внешних зависимостей (таких как RabbitMQ), использование надлежащей СУБД - это вариант, или, возможно, лучше вообще избегать какого-либо внешнего инструмента -сделать так, чтобы ваш родительский процесс отвечал за очередь, и заставить ваших детей каким-то образом сообщить результат родителю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...