如何以非阻塞方式将pymongo ChangeStreams与Flask一起实际使用?

2024-10-01 04:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在学习flask和PyMongo,遇到了ChangeStreams。我确实了解ChangeStreams是如何工作的,但我只在Node和Express中使用过它们。我已在我的Flask应用程序中实现了ChangeStreams,如下所示:

with ms.db.collection.watch() as stream:
    for change in stream:
        print(change)

在官方文档页面上,它说这是一种阻止方法。但是我该如何使它成为无阻塞的呢?因为当前我的ChangeStream逻辑位于不同的文件中,我将其导入server.py文件。因此,当它从未经过导入,而Flask应用程序根本无法启动时。下面是我的server.py

from flask import Flask, render_template, request
import mongo_starter as ms
import changestream as cs


app = Flask(__name__)


@app.route('/')
def home():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(host="0.0.0.0", port="5000")

下面是我的ChangeStream.py

import mongo_starter as ms 

with ms.db.collection.watch() as stream:
    for change in stream:
        print(change)

下面是我的MongoStarter.py,它实际上启动了到Mongo的连接

import pymongo
import mongo_config as mc

print(mc.data_header)
try:
    print('Connecting to Database...')
    mongo_client = pymongo.MongoClient(mc.mongo_url)
    db = mongo_client['PyMongo']
    collection = db['Test Data']
    print("Connection to Database Successful!")
except pymongo.errors.InvalidURI:
    print('Error Connecting to Database')

当我使用nodemon运行应用程序时,它会将以下内容打印到输出中

[nodemon] restarting due to changes...
[nodemon] starting `python server.py`
----------------- MONGO CONNECTION LOG --------------------
Connecting to Database...
Connection to Database Successful!

因此,它实际上从未经过变更流方法。如何使它以异步方式工作?我已经看过asyncio,但想看看是否有任何方法可以在不使用asyncio的情况下实现它


Tags: topyimport应用程序flaskdbstreammongo