首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尝试在不中断Rails服务器的情况下运行Python脚本

尝试在不中断Rails服务器的情况下运行Python脚本
EN

Stack Overflow用户
提问于 2018-09-10 01:43:08
回答 1查看 0关注 0票数 0

我试图从Rails应用程序运行Python脚本。此脚本可以通过调用以下命令将进度更新POST到Rails服务器:

代码语言:javascript
复制
requests.post('http://127.0.0.1:3000/progress', data={'progress':'10'})

我尝试了一些方法让Rails服务器启动Python脚本并立即继续其余的工作。它需要是免费的,以响应用户并接收上述进度更新。

我试过了:

  • 在还呈现视图的控制器方法中: system `python3 /path/to/script.py` out, err, st = Open3.capture3('python3', 'path/to/script.py')
  • 以上都是在after_action中。
  • 这两个都在active_job中。

在每种情况下,一旦启动脚本,服务器基本上就会挂起,好像它正在等待。我正在使用的测试脚本发送一个进度更新然后退出,所以即使服务器正在等待它完成它也不会导致重大延迟。

这里发生了什么,以及如何在后台正确运行脚本以便我的Rails服务器可以响应它?

EN

Stack Overflow用户

发布于 2018-09-10 11:34:01

ActiveJob应该工作。尝试这个:

  1. 在控制台中生成一个新的Job rails g job SlowPython
  2. 将你的慢速python脚本移动到 app/jobs/script.py
  3. 打开新文件app/jobs/slow_python_job.rb并添加python3 /app/jobs/script.pyperform功能
  4. 在控制器的方法中,您希望它运行添加 SlowPythonJob.perform_later

现在,当您在浏览器中打开控制器操作时,它将对作业进行排队并在后台运行它,同时立即运行其余操作。ActiveJob还允许您运行SlowPythonJob.perform_now将运行作业并等待其完成,然后再运行其余操作。

所做的就是告诉rails通过Active Job Async Job队列适配器执行SlowPythonJob的perform方法。这适用于开发环境。请记住,您必须设置另一个队列适配器来处理生产中的作业队列,因为Active Job Async Job如果发生崩溃将丢弃所有作业......并且它不像其他作业那么快或具有许多功能。

以下是队列适配器列表:http//edgeapi.rubyonrails.org/classes/ActiveJob/QueueAdapters.html

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档