小编Ke *_* Lu的帖子

为什么 python 脚本在主进程退出后挂起

我在一个函数中有一些耗时的任务,并且我希望该函数即使在主进程退出后也能运行。

代码示例:

def do_time_consuming_thing():
    // do time consuming task here
    time.sleep(30)

def worker():
    print "start a child process:"
    p = multiprocessing.Process(target=do_time_consuming_thing,args=())
    p.start()
    print "child pid:%d" % p.pid
    sys.exit(0) // main process exit here.

def test():
    worker()
Run Code Online (Sandbox Code Playgroud)

但是当我在 shell 命令行中运行上述代码时,在子进程完成之前我无法返回到命令行提示符。

如何在 sys.exit(0) 完成后立即返回到命令行提示符。

python multiprocessing python-2.7

4
推荐指数
1
解决办法
6069
查看次数

多处理产生不复存在的进程

我使用 Tornado 作为 Web 服务器,用户可以通过前端页面提交任务,审核后他们可以启动提交的任务。在这种情况下,我想启动一个异步子进程来处理任务,因此我在请求处理程序中编写了以下代码:

def task_handler():
    // handle task here

def start_a_process_for_task():
    p = multiprocessing.Process(target=task_handler,args=())
    p.start()
    return 0
Run Code Online (Sandbox Code Playgroud)

我不关心子流程,只是为它启动一个流程并返回前端页面并告诉用户任务已启动。任务本身将在后台运行,并将其状态或结果记录到数据库中,以便用户稍后可以在网页上查看。所以在这里我不想使用阻塞的 p.join(),但是在任务完成后没有 p.join(),子进程成为一个不复存在的进程,因为 Tornado 作为守护进程运行并且永不退出,不复存在过程永远不会消失。

谁知道怎么解决这个问题,谢谢。

python multiprocessing python-2.7

4
推荐指数
1
解决办法
5690
查看次数

标签 统计

multiprocessing ×2

python ×2

python-2.7 ×2