如何从线程内运行的子例程中获取返回值

时间:2017-12-18 18:45:20

标签: python multithreading python-3.x python-multithreading subroutine

我无法从python 3中的线程中运行的子程序中提取返回值。

import threading 
from threading import Thread 
def dothis():
    x = 17
    return x

Thread(target = dothis).start()

print(x)

这只是给了我一个错误并说x没有定义,但是我从子程序中返回了它。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

x是一个局部变量。它仅存在于dothis函数的范围内。

如果您希望在函数外部访问它,则需要将其设为全局变量。

x = 0

def dothis():
    global x
    x = 17

但是,全局变量(不是常量)通常是代码设计不佳的标志,应该避免,特别是对于线程,因为您可能会遇到多个线程可能尝试修改同一个全局变量的竞争条件。

答案 1 :(得分:0)

似乎您想要为函数提供输入,同时运行多个线程,并获取输出值。像这样:

import multiprocessing

def dothis(x):
    print x
    #More Code
    return x

if __name__ == '__main__':
    multiprocessing.freeze_support()
    InputsList = [1,2,3,4]
    Processors = 4
    pool = multiprocessing.Pool(Processors)
    Results = pool.map(dothis, InputsList)
    print Results

如前所述,在您的代码中,x尚未在函数外定义,这就是您收到此错误的原因。输入必须在主函数中定义或作为全局变量定义。

您可以将输入列表传递给所需的函数,Results将包含返回值的列表。