如何从线程内运行的子程序中获取返回值[重复]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我在python 3中从一个线程中运行的子例程中提取返回值时遇到了问题。

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

Thread(target = dothis).start()

print(x)

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

python multithreading python-3.x python-multithreading subroutine
2个回答
0
投票

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

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

x = 0

def dothis():
    global x
    x = 17

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


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将包含返回值的列表。

© www.soinside.com 2019 - 2024. All rights reserved.