Почему Redis Queue (RQ) не видит модуль в приложении Flask? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть функция index , которая берет изображение и передает его для обработки функции run , импортированной из другого модуля ( true.detect.py ),Когда я пытаюсь выполнить задачу job = q.enqueue(run, img) внутри функции index , я получаю ошибку импорта

12:02:13 default: true.detect.run('/home/y700/projects/ultratrue/app/uploads/honey-bee-2-1qf37bs.jpg') (7544ed7c-7274-416c-bc83-daa90d7fe0c1)
12:02:13 ModuleNotFoundError: No module named 'true'

Структура папки

project
    -true
        --detect.py
        --other files
    -app
        --app.py
        --main.py

app.py

basedir = os.path.abspath(os.path.join(os.path.dirname( __file__ )))

UPLOAD_FOLDER = basedir + '/uploads'
ALLOWED_EXTENSIONS = set(["jpg"])

app = Flask(__name__)
app.config.from_object(Configuration)

base = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..'))
sys.path.append(base)

from true.detect import run

#Connect to redis DB
from redis import Redis
from rq import Queue

q = Queue(connection=Redis())


@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        ...load and save img file logic.... 
        ........
            img = (os.path.join(app.config['UPLOAD_FOLDER'], filename))
            job = q.enqueue(run, img)
            if job.is_finished:
                return redirect(url_for("result", count=count))
            else:
                return "Wait"

    return render_template("index.html")

Но затем я изменяю

job = q.enqueue(run, img)
if job.is_finished:
    return redirect(url_for("result", count=count)) 
else:
    return "Wait"

на стандартный вызов функции без использования очереди задач

count = run(img)
return redirect(url_for("result", count=count))

все начинает работать.

...