gpt4 book ai didi

python - 在 Python 中使用多处理池

转载 作者:太空狗 更新时间:2023-10-29 21:02:05 25 4
gpt4 key购买 nike

有人能指出这段代码有什么问题吗?它不给出任何结果。

    import multiprocessing

results = []
def log_results(result):
results.append(result)


def multiply(x, y):
print(f"Gets here for process name {multiprocessing.current_process().name()}")
return x * y

if __name__ == "__main__":
pool = multiprocessing.Pool()
numbers = [(1,1), (2,2), (3,3)]
for x, y in numbers:
print (f"Checking x {x} and y {y}")
pool.apply_async(multiply, (x, y), callback=log_results)
pool.close()
pool.join()
print(results)

results 是一个空列表,在这种情况下不应该是对的吗?我用过 apply_async 和 map_async 。两者都没有给出正确的输出。有人可以帮我吗

最佳答案

编辑:您对代码进行了编辑,所以现在我在下面的回答已经过时了。我认为唯一需要做的两件事是:

  1. 添加一个 error_callback,因为我仍然认为您需要确保写入的池不会在默认情况下静默失败。
  2. multiprocessing.current_process().name() 重写为 multiprocessing.current_process().name

所以:

import multiprocessing

results = []
def log_results(result):
results.append(result)

def log_e(e):
print(e)

def multiply(x, y):
print(f"Gets here for process name {multiprocessing.current_process().name}")
return x * y


pool = multiprocessing.Pool()
numbers = [(1,1), (2,2), (3,3)]
for x, y in numbers:
print (f"Checking x {x} and y {y}")
pool.apply_async(multiply, (x, y), callback=log_results,
error_callback=log_e)
pool.close()
pool.join()
print(results)

旧答案

这让我发疯了一会儿,但后来就明白了。

如果我用 multiply 运行它,改变如下:

def multiply(nums):
print("print")
return nums[0] * nums[1]

运行良好。你在评论中说“我不认为函数 multiply 首先被调用。”这是因为指定了 callback 但没有指定 error_callback。省略错误回调的结果是您的脚本正在静默失败。

您可以通过以下方式检查:

import multiprocessing

results = []
def log_results(result):
print(result)

def log_e(e):
print(e)

def multiply(x, y):
print(f"Gets here for process name {multiprocessing.current_process().name()}")
return x * y

pool = multiprocessing.Pool()
numbers = [[1,1], [2,2], [3,3]]
mapResult = pool.map_async(multiply, numbers, callback=log_results,
error_callback=log_e)

pool.close()
pool.join()

给出:

multiply() missing 1 required positional argument: 'y'

然后用 multiply 像这样:

def multiply(nums):
return nums[0] * nums[1]

然后返回 [1, 4, 9]

PS 我正在运行 Python 3.6.7

关于python - 在 Python 中使用多处理池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55535961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com