Python 如何从多处理进程中获取函数返回值?

Python 如何从多处理进程中获取函数返回值?,python,multiprocessing,Python,Multiprocessing,我有两个函数,我想同时运行它们。所以,我试着: from multiprocessing import Process def func1(): for i in range(0, 100000000): pass return 'abc' def func2(): for i in range(0, 100000000): pass return 'xyz' if __name__=='__main__':

我有两个函数,我想同时运行它们。所以,我试着:

from multiprocessing import Process

def func1():
    for i in range(0, 100000000):
        pass
    return 'abc'
    
def func2():
    for i in range(0, 100000000):
        pass
    return 'xyz'
    
if __name__=='__main__':
    p1 = Process(target=func1()).start()
    p2 = Process(target=func2()).start()
现在,如何获取的返回值,例如
func1()


例如,我可以使用
print(func1())
获取返回值,但它会再次执行该函数,并且再次执行
func1()
需要很长时间。如何不使函数再次运行以获得结果?

您也可以使用
并发.futures
模块

import concurrent.futures
_pool = concurrent.futures.ThreadPoolExecutor()

def func1():
    for i in range(0, 100000000):
        pass
    return 'abc'
    
def func2():
    for i in range(0, 100000000):
        pass
    return 'xyz'
    
if __name__=='__main__':
    p1 = _pool.submit(func1)
    p2 = _pool.submit(func2)

    print(p1.result(), p2.result())

下面是如何使用我在评论中建议的
多处理.Pool
实现的

import multiprocessing

def func1():
    for i in range(0, 100000000):
        pass
    return 'abc'

def func2():
    for i in range(0, 100000000):
        pass
    return 'xyz'

if __name__=='__main__':

    funcs = func1, func2

    with multiprocessing.Pool() as pool:
        results = [pool.apply_async(func) for func in funcs]
        pool.close()
        pool.join()

    results = [result.get() for result in results]
    print(f'{results}')  # -> ['abc', 'xyz']

多处理进程
中唯一存在的“返回值”是在它完成执行之后,有一个
exitcode
——它是一个整数值。不过,您可以使用
multprocessing.Pool
来做您想做的事情。我使用队列来做这件事。