使用celery将任务从组件A发送到组件B
Using celery to send tasks from component A to component B
我想在此示例中使用的技术是用于队列的 Celery 和用于组件实现的 python。
想象一个包含 2 个组件的简单项目。一个是连接到 API 并收集数据的网络应用程序。组件 2 是一个可以处理数据的处理器。当 Web 应用程序从 API 获取数据时,它应该将任务发送到任务队列中,其中包括刚刚抓取的数据,然后处理器使用这些数据来处理数据。
这是否是完成这样的任务的明智方法是值得商榷的,而不是我的问题的重点。
我的问题是,处理事物的任务是在处理器中定义的,因为它们说明了应该执行什么处理功能,而该功能的定义显然在处理器中。现在 Web 应用程序无法访问任务定义,他如何将任务传达给处理器?
您是否必须在网络应用程序中持有处理器源代码的副本?
您是否使处理器成为网络应用程序的依赖项?
处理这种情况的最佳做法是什么?
您所描述的可能是 Celery 最常见的用例之一。看看有多少人在 Whosebug 上问 Django/Flask + Celery 问题...如果您是 Django 用户,那么有一整篇 section in the Celery documentation 描述了如何做您想要的。事情应该与其他框架相似。
Do you have to hold a copy of the source code of the processor within the web app?
据我所知,您不必这样做(我没有使用任何 Web 框架),但您可能确实需要这样做,因为与 Celery 进行了更深入的集成。如果您的 Web 应用程序知道 Celery 任务名称及其参数,它可以将其安排到 运行 而无需实际访问 Python 代码。这是使用 send_task(task_name, ...)
.
完成的
Do you make the processor a dependency of the web app?
正如我在上面所写的,有几种使用方法。如果您想要更紧密的集成,那么是的。如果您只想 运行 任务并使用 send_task() 获得结果,那么您的 Web 应用程序应该只依赖于 Celery。
What is the best practice approach to handle such a scenario?
遵循 Django 指南。我建议你独立 运行 Celery,运行 一些任务,这样你就可以了解它如何分配工作等的基本原则。
我想在此示例中使用的技术是用于队列的 Celery 和用于组件实现的 python。
想象一个包含 2 个组件的简单项目。一个是连接到 API 并收集数据的网络应用程序。组件 2 是一个可以处理数据的处理器。当 Web 应用程序从 API 获取数据时,它应该将任务发送到任务队列中,其中包括刚刚抓取的数据,然后处理器使用这些数据来处理数据。
这是否是完成这样的任务的明智方法是值得商榷的,而不是我的问题的重点。 我的问题是,处理事物的任务是在处理器中定义的,因为它们说明了应该执行什么处理功能,而该功能的定义显然在处理器中。现在 Web 应用程序无法访问任务定义,他如何将任务传达给处理器?
您是否必须在网络应用程序中持有处理器源代码的副本?
您是否使处理器成为网络应用程序的依赖项?
处理这种情况的最佳做法是什么?
您所描述的可能是 Celery 最常见的用例之一。看看有多少人在 Whosebug 上问 Django/Flask + Celery 问题...如果您是 Django 用户,那么有一整篇 section in the Celery documentation 描述了如何做您想要的。事情应该与其他框架相似。
Do you have to hold a copy of the source code of the processor within the web app?
据我所知,您不必这样做(我没有使用任何 Web 框架),但您可能确实需要这样做,因为与 Celery 进行了更深入的集成。如果您的 Web 应用程序知道 Celery 任务名称及其参数,它可以将其安排到 运行 而无需实际访问 Python 代码。这是使用 send_task(task_name, ...)
.
Do you make the processor a dependency of the web app?
正如我在上面所写的,有几种使用方法。如果您想要更紧密的集成,那么是的。如果您只想 运行 任务并使用 send_task() 获得结果,那么您的 Web 应用程序应该只依赖于 Celery。
What is the best practice approach to handle such a scenario?
遵循 Django 指南。我建议你独立 运行 Celery,运行 一些任务,这样你就可以了解它如何分配工作等的基本原则。