开始使用 Python 中的多处理



我正在尝试在我的脚本中设置一个多进程:我想遍历数组并为数组中的每个项目运行一个函数,但我希望同时调用这个函数。

这是原始设置:

def my_function(my_variable):
    #DO stuff
    return my_variable_updated
def main():
    #initialize my_variable as a list with 10000 items
    results = []
    for item in my_variable:
    results.append(my_function(item))
    #continue script

如何将其转换为多处理,以便我可以同时运行多个my_functions并更快地进入"#continue 脚本"?我需要为此使用queue吗?

您必须非常彻底地重组脚本才能实现multiprocessing。主脚本如下所示:

from multiprocessing import Process, JoinableQueue, Manager
def my_function(input_queue, manager_list):
    while True:
        item_to_process = input_queue.get() # item_to_process will be an (index, item) tuple
        result_of_processing = item_to_process[1] ** 2
        manager_list[item_to_process[0]] = result_of_processing
        input_queue.task_done()
def main():
    item_count = 10 # 10000 in your case
    my_variable = [i for i in range(item_count)]
    q = JoinableQueue()
    for index, item in enumerate(my_variable):
        q.put((index, item))
    manager = Manager()
    results = manager.list([0] * item_count) # initialize to same size as my_variable
    worker_count = 2
    for _ in range(worker_count):
        p = Process(target=my_function, args=[q, results])
        p.daemon = True # optional, but should be used unless your subprocess will spawn another process
        p.start()
    # now you can continue on
    # but when you need to access `results` you have to put:
    q.join()
    # now we have our results
    print(results)
if __name__ == "__main__":
    main()

耶尔丁

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在我的简单情况下。

你也可以使用游泳池,但我对此并不精通,也不想让你误入歧途。

使用多处理时要注意的主要事情是避免死锁,并保持共享内存,而且它很快就会变得棘手!在大多数情况下,建议改用threading.Thread就足够了!这个模块非常容易烹饪,但你仍然可能需要一个queue.Queue。但是,您不必担心共享内存和诸如multiprocessing.Manager之类的事情。

相关内容

  • 没有找到相关文章

最新更新