首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python-rq在远程服务器上执行长任务

使用python-rq在远程服务器上执行长任务
EN

Stack Overflow用户
提问于 2014-05-04 21:16:07
回答 2查看 3K关注 0票数 0

我编写了一些代码,需要很长时间才能执行(2-3天),我想把它推到要在那里执行的服务器上。代码中有丰富的类和相互交互的函数,但最终整个代码执行都是通过一个函数(test2)完成的,这将使它工作。我发现,对我来说,解决方案可能是一个任务队列,而且由于我不需要同时执行多个任务,我发现RQ可能适合我的需要。

代码语言:javascript
复制
#action_test.py

import action2

def test1():
    fl = action2.FollowersList()
    mech = action2.Mechanics()
    manager = action2.Manager()
    manager.launch(mech,fl)
    for i in range(0,10):
        manager.iterate(mech,fl)

def test2():
    messageList = []
    fl = action2.FollowersList()
    mech = action2.Mechanics()
    manager = action2.Manager()
    manager.launch(mech,fl)
    for i in range(0,2000):
        message = manager.iterate(mech,fl)
        messageList.append(message)
    return messageList

我在远程服务器上设置了Reddis。在守护进程模式下运行它。而不是我编写了一个简单的模块,它应该将我的test2函数放在一个队列中。

代码语言:javascript
复制
#app.py

from rq import Connection, Queue
from redis import Redis
from action_test import test2

def main():
    # Tell RQ what Redis connection to use
    redis_conn = Redis()
    q = Queue(connection=redis_conn)  # no args implies the default queue

    # Delay calculation of the multiplication
    job = q.enqueue(test2, timeout = 259200)
    print job.result   # => None

if __name__ == '__main__':
    main()

然后我遇到了一个问题:在python网页(http://python-rq.org/docs/workers/)上,所描述的启动工作人员的方法是执行

代码语言:javascript
复制
$ rqworker

从贝壳里。但是这个工作程序不是作为守护进程启动的,因此当我连接到这个远程服务器时,我的应用程序是在ssh上安装的,如果我的ssh连接中断了,那么这个工作程序也会中断,这也不是我想要的行为。在我的代码执行时,将ssh连接维护2-3天,除了在我的示例中使用python之外,它拒绝整个逻辑。有什么办法解决这个问题吗?也许应该启动python工作人员,而不是从要去守护的shell启动?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-04 21:32:54

您可以在后台(&)运行工作人员,并将输出发送到文本文件(nohup):

代码语言:javascript
复制
nohup rqworker &

Bydefault会将输出写入同一目录下的文件nohup.out (如果不允许,则写入$HOME/nohup.out )。现在可以关闭ssh连接。

在默认设置下,rq会为该文件编写大量内容,但是--quiet会帮助:

代码语言:javascript
复制
nohup rqworker --quiet &

男子汉如何在后台开始作业

票数 1
EN

Stack Overflow用户

发布于 2016-05-04 13:36:53

您可以为此使用监督d包。它有助于设置一个deamon进程,以便在后台运行任务。而且它也很容易配置。

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

https://stackoverflow.com/questions/23461659

复制
相关文章

相似问题

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