我们在Windows下的IIS下运行Flask站点,对于进程外任务,我们使用Celery. Celery在Windows下给了我们一些问题,但是现在我们很满意运行版本3.1.12,使用RabbitMQ / AMQP作为后端,它可以在Windows下运行.Celery(4)的新版...

我们在Windows下的IIS下运行Flask站点,对于进程外任务,我们使用Celery. Celery在Windows下给了我们一些问题,但是现在我们很满意运行版本3.1.12,使用RabbitMQ / AMQP作为后端,它可以在Windows下运行.
Celery(4)的新版本有dropped support for Windows,所以我正在寻找一个可行的替代方案.
RQ似乎是一个非常好的任务队列,但它也不支持Windows(bottom of the page)
我已经看到了一些看起来不太受欢迎的任务队列,例如:
> kuyruk
> tasktiger
> huey
但目前还不清楚这些是否支持Windows和Flask.
我想知道是否有人在Windows下运行Python任务队列的经验.也许我提到的那个之一,或者另类.
我们不能选择运行Linux机器,因为我们没有管理Linux的经验,而且我们有许多运行需要Windows的遗留内容.
解决方法:
我在Windows上运行带有Huey的Flask没有任何问题,不可否认只是用于开发和测试.为了生产,我在Linux服务器上使用Flask / Huey.两者都是Redis后端,Flask 0.12和Huey 1.2.0.
我使用工厂模式创建Flask应用程序的专门“减少”版本,供Huey任务特定使用.此版本不加载蓝图或配置Flask-Admin,因为Huey任务中不需要这些.
app文件夹中__init__.py的示例代码. App是一个从Flask扩展的类:
def create_app(settings_override=None):
app = App('app')
if settings_override:
app.config.from_object(settings_override)
else:
app.config.from_object(os.environ['APP_SETTINGS'])
from .ext import configure_extensions
configure_extensions(app, admin, load_modules=True)
# REST
import rest.api_v1
app.register_blueprint(api_v1_bp, url_prefix='/api/v1')
# ... and more suff
def create_huey_app():
app = App('huey app')
app.config.from_object(os.environ['APP_SETTINGS'])
from .ext import configure_extensions
configure_extensions(app, admin=None, load_modules=False)
return app
configure_extensions的概念取自Quokka CMS.检查其应用程序__init__.py及其extensions module,看看它是如何实现的.另请注意,此项目如何创建特定应用程序(create_celery_app)以与Celery任务队列一起使用.
tasks.py的示例.请注意使用app.app_context():来创建Flask上下文.现在我的函数可以访问扩展名,如Flask-Mail,Flask-SqlAlchemy(db,models)等.
@huey.task()
def generate_transaction_documents_and_email(transaction_id):
app = create_huey_app()
with app.app_context():
reports.generate_transaction_documents_and_email(transaction_id)
@huey.task()
def send_email(subject, recipients, text_body, html_body, attachments=[], cc=[]):
app = create_huey_app()
with app.app_context():
emails.send_email(subject, recipients, text_body, html_body, attachments, cc)
@huey.periodic_task(crontab(minute='30'))
def synchronize_mailing_list():
app = create_huey_app()
if app.config['CREATESEND_SYNCHRONIZE']:
_list_name = app.config['CREATESEND_LIST']
with app.app_context():
sync_delete_ar_subscribers(_list_name)
sync_add_ar_subscribers(_list_name)
本文标题为:现在Celery 4已经放弃了Windows支持,Windows上(Python 3)任务队列的最佳选择是什么?


基础教程推荐
- Python,cx_freeze和Windows控制台 2023-11-14
- Python:使用Winsound在内存中播放WAV-SND_MEMORY 2023-11-14
- Python的进程及进程池详解 2023-08-04
- 如何在Python中的多进程中解决“AttributeError:__ exit__”问题? 2023-11-15
- Pytorch关于Dataset 的数据处理 2023-08-04
- 【Python】进程和多线程分别适用于什么情况? 2023-09-05
- 关于命令行执行Python脚本的传参方式 2022-10-20
- 在windows上解决Command "python setup.py egg_info" fail 2023-09-03
- Centos 7安装python3(PY3.6) 2023-09-04
- Linux编译opencv python错误:ImportError:libjasper.so.1 2023-11-11