1

Quart フレームワークを使用していますが、RabbitMQ Pika コネクタも使用する必要がありますが、両方とも無限ループがあるため、うまく動作させることができません。

エントリーポイント:

from quart import Quart
from .service import Service

app = Quart(__name__)

@app.before_serving
async def startup():
app.service_task = asyncio.ensure_future(service.start())

if not service.initialise():
    sys.exit()

サービス クラス:

class Service:
def __init__(self, new_instance):
    self._connection = None
    self._channel = None
    self._messaging_thread = None

def initialise(self):

    credentials = pika.PlainCredentials('username', 'password')
    parameters = pika.ConnectionParameters('localhost', credentials=credentials)
    self._connection = pika.BlockingConnection(parameters)
    self._channel = self._connection.channel()
    self._channel.queue_declare(queue='to_be_processed_queue')

    self._channel.basic_consume(queue='to_be_processed_queue',
                                auto_ack=True,
                                on_message_callback=self.callback)
  
    print('creating thread')
    self._messaging_thread = Thread(target=self.run_consume())
    #self._messaging_thread.start()
    print('Thread created...')

def run_consume(self):
    try:
        self._channel.start_consuming()
    except KeyboardInterrupt:
        self._shutdown()

コードはprint('Thread created...')にさえ到達していません。私には理解できません。この質問から、RabbitMQ がスレッドセーフではないことは理解していますが、RabbitMQ を実行する他の方法はわかりません。

4

1 に答える 1