Доброго дня. Разбираюсь с использованием 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))
То все прекрасно импортируется и работает.