如何在Python中获取进程的返回值?

时间:2015-04-19 00:17:59

标签: python multithreading python-2.7 parallel-processing return

我有一些代码可以执行以下操作:

  • 创建一个进程(进程是solvePuzzle(filename))
  • 运行流程
  • 如果流程在timeLimit内完成,请执行某些操作
  • 如果流程超时,请执行其他操作

我的问题在于第三项任务;我希望能够获得已处理函数的返回值。这是我的代码(我编写了声明p.returnValue(),因为这是我正在尝试做的事情):

    #Start process
    p = multiprocessing.Process(target=globals()['solvePuzzle'], args=(filename,))        
    p.start()

    #Wait for timeLimit seconds or until process finishes
    p.join(timeLimit)

    #If thread is still active
    if p.is_alive():
        print "Puzzle timed out after " + str(timeLimit) + " seconds!"

        # Terminate
        p.terminate()
        p.join()
    else:
        print "Solution = " + str(p.returnValue())

1 个答案:

答案 0 :(得分:0)

进程有一个退出代码。这通常在linux中用于指示作业是否成功。返回码为' 0'表示成功。可以使用代码中的以下更改来获取进程的返回代码。

import multiprocessing
import time
timeLimit = 200
#Start process
def start():
    p = multiprocessing.Process(target=time.sleep, args=(10,))
    p.start()

    #Wait for timeLimit seconds or until process finishes
    p.join(timeLimit)

    #If thread is still active
    if p.is_alive():
        print "Puzzle timed out after " + str(timeLimit) + " seconds!"

        # Terminate
        p.terminate()
        p.join()
    else:
        print "Solution = " + str(p.exitcode)

start()

如果您要从流程返回一个整数,则可以使用此方法。如果你有其他类型的值(例如字符串),你试图回来,那么你需要使用队列。查看http://pymotw.com/2/multiprocessing/communication.html

上的示例