我正在编写python应用程序,目前正在Heroku上托管。它处于早期开发阶段,所以我使用免费帐户与一个网络动态。不过,我希望我的较重任务异步完成,所以我使用了IronWorker附加组件。我已经设置好了,它可以做最简单的工作,比如发送电子邮件或任何不需要将任何数据发送回应用程序的工作。问题是:如何将工人输出从钢铁工人发送回我的应用程序?或者更好的是,如何通知我的应用程序工作人员已完成工作?在
我研究了其他铁的解决方案,比如缓存和消息队列,但是我唯一能找到的就是我可以显式地请求worker状态。显然,我不想让我的web服务轮询工作人员,因为这有点违背了将任务移动到后台的最初目的。我错过了什么?在
我发现这个问题在谷歌很高,所以如果你带着希望找到更多细节的希望来到这里,我最后要做的是:
首先,我在我的应用程序上准备了端点。我的应用程序使用Flask,因此代码如下所示:
注意,在我的例子中,GET只用于测试,我不希望我的用户访问这个端点并调用任务。但我可以想象这样做确实有用的情况,特别是如果您不使用任何类型的调度程序来执行任务。在
在端点准备好之后,我开始寻找从工作者那里访问该端点的方法。我发现了这个fantastic requests library,并用在我的工人身上:
^{pr2}$所以最后这里没有真正的魔力,唯一重要的是在任务完成时通知页面时在有效负载中发送回调url。或者,如果在应用程序中使用端点url,则可以将其放置在数据库中。顺便说一句,上面的截图还显示了如何连接到您的worker中的postgresql数据库并打印所有用户。在
最后需要注意的是如何格式化.worker文件,我的文件如下所示:
这将安装最新版本的SQLAlchemy和requests,如果您的项目依赖于库的任何特定版本,则应改为执行以下操作:
最简单的方法-将消息从worker推送到api-它是日志或任何你需要在你的应用中的东西
相关问题 更多 >
编程相关推荐