繁体   English   中英

如何从 multiprocessing.Process 获取函数返回值?

[英]How to get function return value from a multiprocessing.Process?

我有两个功能,我想同时运行它们。 所以,我试过:

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()需要很长时间。 如何不让函数再次运行以获得结果?

这是我在评论中建议的如何使用multiprocessing.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']

您还可以使用concurrent.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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM