我有一个跨多个处理器运行的webscraper,并写入sqlite数据库。由于Sqlite并不是要处理并发写入,因此我想使用一个队列系统,该系统可以处理多个输入,并且只有1个对象写入数据库
我经历了RabbitMQ你好世界示例,并得到一个错误。
我的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
的{{1}}文件:
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)
那是什么意思?
答案 0 :(得分:1)
您不能直接在RabbitMQ上发布python对象,因为您发布的消息是字符串。
您必须首先使用json.dumps
和json.loads
或pickle
模块对对象进行序列化和反序列化。
但是,如果您可以引入外部依赖关系(例如RabbitMQ),则可以选择使用适当的RDBMS,或者最好完全避免使用任何外部工具-让您的父进程负责队列并创建您的孩子以某种方式将结果发回给父母。