1.系统以及软件版本
系统:mac10.13.6
python版本:python3.11
flask版本:3.0.2
celery版本:5.3.6
flask-redis版本:0.4.0
pycharm版本:PyCharm 2022.2.5 (Professional Edition)
2.搭建过程
确保正确安装pycharm,python3.11(低版本可能会存在与flask不兼容的情况)
pycharm中新建项目选择flask项目
创建以后在当前目录的终端下执行python -m venv myenv,使用python自带的虚拟环境venv创建新的虚拟环境myenv
激活虚拟环境source myenv/bin/activate,此时目录中将多一个虚拟环境路径
为了提高pip的安装速度,永久更改pip安装的镜像源,终端中执行 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
然后就可以使用pip安装各种需要的包了,包括flask,celery等。
app,celery的定义
在项目的开发过程中为了避免出现循环引用的问题,我采用app和celery在蓝图blueprints包的__init__.py文件中定义,在主文件app.py中引入定义的方式。
定义app
def create_app(): app = Flask(__name__, static_folder='', template_folder='templates') app.config.from_object(config) # 注册蓝图 from .auth import bp as auth_bp app.register_blueprint(auth_bp) return app
定义celery
def make_celery(app): class ContextTask(celery.Task): def __call__(self, *args, **kwargs): with app.app_context(): return self.run(*args, **kwargs) celery.Task = ContextTask return celery
app.py中
app = create_app() celery = make_celery(app)
并行任务的定义
为了使代码结构更加的清晰,并行任务我在蓝图blueprints包中新建个子包进行定义,如下modelForecast。
并行任务的代理安装
电脑中需要安装redis,并启动服务。命令为redis-server
并行任务启动
在虚拟环境中执行celery -A app.celery worker --loglevel=info启动celery工人
启动问题
if __name__ == '__main__': app.run(host='0.0.0.0', port=9000, debug=False)
代码不生效,需要在pycharm中将flask程序转换成python程序,然后再执行后有效