ubuntu 中多个进程之间通信的最佳方式是什么

What is the best way to communicate among multiple processes in ubuntu

我在 python 中有三种不同的机器学习模型。为了提高性能,我 运行 它们在不同的终端上并行。他们通过文件相互交流和共享数据。这些模型正在创建批量文件以供其他人使用。所有进程都是 运行 并行的,但依赖于其他进程准备的数据。一旦进程 A 准备了一批数据,它就会创建一个文件以向其他进程发出数据已准备就绪的信号,然后进程 B 开始处理它,同时也在寻找其他批次。如此庞大的数据如何在不创建文件的情况下共享给下一个进程?在 python 中没有 creating/deleting 个临时文件的情况下,有没有更好的方法在这些进程之间进行通信? 谢谢

下面是如何在 Python3 中进行多处理的示例。结果不是存储在文件中,而是存储在字典中(见输出)

from multiprocessing import Pool, cpu_count

def multi_processor(function_name):

    file_list = []

    # Test, put 6 strings in the list so your_function should run six times
    # with 6 processors in parallel, (assuming your CPU has enough cores)
    file_list.append("test1")
    file_list.append("test2")
    file_list.append("test3")
    file_list.append("test4")
    file_list.append("test5")
    file_list.append("test6")

    # Use max number of system processors - 1
    pool = Pool(processes=cpu_count()-1)
    pool.daemon = True

    results = {}
    # for every item in the file_list, start a new process
    for aud_file in file_list:
        results[aud_file] = pool.apply_async(your_function, args=("arg1", "arg2"))

    # Wait for all processes to finish before proceeding
    pool.close()
    pool.join()

    # Results and any errors are returned
    return {your_function: result.get() for your_function, result in results.items()}


def your_function(arg1, arg2):
    try:
        print("put your stuff in this function")
        your_results = ""
        return your_results
    except Exception as e:
        return str(e)

if __name__ == "__main__":
    some_results = multi_processor("your_function")
    print(some_results)

输出为

put your stuff in this function
put your stuff in this function
put your stuff in this function
put your stuff in this function
put your stuff in this function
put your stuff in this function
{'test1': '', 'test2': '', 'test3': '', 'test4': '', 'test5': '', 'test6': ''}

您可以考虑 运行 建立一个小型 Redis 实例...一个非常快的内存数据结构服务器。

它允许您非常简单地在进程之间共享字符串、列表、队列、散列、原子整数、集合、有序集合。

由于联网,您不仅可以在单台机器内共享所有这些数据结构,还可以跨多台机器共享。

因为它绑定了 C/C++、Python、bash、Ruby、Perl 等,这也意味着您可以使用 shell,例如,快速将 commands/data 注入您的应用程序以更改其行为,或通过查看变量的设置方式获得调试洞察力。