@Lepilov

Почему RQ не видит модуль?

Доброго дня. Разбираюсь с использованием RQ в связке с Flask. Внутри функции index как отдельная задача вызывается импортированная из другого модуля true.detect.py функция run. Столкнулся с проблемой импорта.
Получаю ошибку:
11:00:50 default: true.detect.run('/home/y700/projects/ultratrue/app/uploads/honey-bee-2-1qf37bs.jpg') (1928a0a3-2051-4951-a57b-dfc2c4992546)
11:00:50 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__ )))
app = Flask(__name__)
app.config.from_object(Configuration)

# Added true folder
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':
        .......upload 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))

То все прекрасно импортируется и работает.
  • Вопрос задан
  • 188 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы