【问题标题】:How can I get the return value of a process in Python? [duplicate]如何在 Python 中获取进程的返回值? [复制]
【发布时间】:2015-06-25 18:58:00
【问题描述】:

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

  • 创建一个进程(进程是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())

【问题讨论】:

  • 使用队列将结果发送回主进程怎么样?
  • 请参阅this question 了解如何将返回值返回给父级的示例。

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


【解决方案1】:

一个进程有一个退出代码。这通常在 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 的示例

【讨论】:

  • 返回值和退出值是两个不同的东西
猜你喜欢
  • 2018-02-16
  • 2023-03-23
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2011-10-17
  • 2018-04-15
相关资源
最近更新 更多