【发布时间】:2021-01-18 01:52:54
【问题描述】:
我正在尝试运行一个用于轮询 AWS SQS 队列的烧瓶应用程序,我要求该应用程序持续轮询并异步响应客户端请求,但我发现该应用程序在轮询时被阻塞。
我已阅读其他有关使用 gevent 的帖子,但我似乎无法使其正常工作。
用于运行应用程序的命令,
gunicorn src.app:app \
--bind 0.0.0.0:8081 \
--timeout 127 \
-k gevent --worker-connections=2000
应用程序代码,
from flask import Flask
from werkzeug.middleware.proxy_fix import ProxyFix
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from src import security
from src.config import config
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = config.pg_url
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
migrate = Migrate(app, db)
app.wsgi_app = ProxyFix(app.wsgi_app)
from src.app import routes
from src.app.services.sqs.queue import SQSQueue
from src.app.services.sqs.message_processor import MessageProcessor
if config.group == 'JobServer':
SQSQueue.poll(MessageProcessor)
轮询代码,
def poll(action):
while True:
try:
message = self.get_message()
if message is None:
time.sleep(5)
else:
# do something
except Exception:
pass
【问题讨论】: