循环中的多处理,"Pool not running" 错误
Multiprocessing in a loop, "Pool not running" error
我正在尝试 运行 一些循环计算,每个计算都会创建、使用和关闭一个池。但是只计算了运行s一次就报错:"Pool not running"。旧的当然不是运行ning,但是新的不应该造吗?
下面是一个简化的例子,类似于我的代码。更奇怪的是,在我的实际代码计算中 运行s 崩溃前 7 次,所以我真的很困惑是什么问题。任何建议表示赞赏!
from pathos.multiprocessing import ProcessingPool as Pool
def add_two(number):
return (number + 2)
def parallel_function(numbers):
pool = Pool(10)
result = pool.imap(add_two, numbers)
pool.close()
pool.join()
return(result)
sets=[
[1, 2, 3],
[2, 3, 4],
[3, 4, 5]
]
for one_set in sets:
x = parallel_function(one_set)
for i in x:
print(i)
这是一个 pathos
限制,它使用单例模式实现池。
这是相关的issue ticket。
我建议您使用另一个工作池实现。
以下假设 pathos 的行为与多处理相同。如果您使用的是多处理,则会出现以下问题。
问题是您的函数在 imap 完成之前关闭了池:
def parallel_function(numbers):
pool = Pool(10)
result = pool.imap(add_two, numbers)
pool.close()
pool.join()
return(result)
这应该写成:
def parallel_function(numbers):
with Pool(10) as pool:
yield from pool.imap(add_two, numbers)
我正在尝试 运行 一些循环计算,每个计算都会创建、使用和关闭一个池。但是只计算了运行s一次就报错:"Pool not running"。旧的当然不是运行ning,但是新的不应该造吗?
下面是一个简化的例子,类似于我的代码。更奇怪的是,在我的实际代码计算中 运行s 崩溃前 7 次,所以我真的很困惑是什么问题。任何建议表示赞赏!
from pathos.multiprocessing import ProcessingPool as Pool
def add_two(number):
return (number + 2)
def parallel_function(numbers):
pool = Pool(10)
result = pool.imap(add_two, numbers)
pool.close()
pool.join()
return(result)
sets=[
[1, 2, 3],
[2, 3, 4],
[3, 4, 5]
]
for one_set in sets:
x = parallel_function(one_set)
for i in x:
print(i)
这是一个 pathos
限制,它使用单例模式实现池。
这是相关的issue ticket。
我建议您使用另一个工作池实现。
以下假设 pathos 的行为与多处理相同。如果您使用的是多处理,则会出现以下问题。
问题是您的函数在 imap 完成之前关闭了池:
def parallel_function(numbers):
pool = Pool(10)
result = pool.imap(add_two, numbers)
pool.close()
pool.join()
return(result)
这应该写成:
def parallel_function(numbers):
with Pool(10) as pool:
yield from pool.imap(add_two, numbers)