multiprocessing.Pool.map() 未按预期工作
multiprocessing.Pool.map() not working as expected
我从简单的例子中了解到,Pool.map 的行为应该与下面的 'normal' python 代码相同,除了并行:
def f(x):
# complicated processing
return x+1
y_serial = []
x = range(100)
for i in x: y_serial += [f(x)]
y_parallel = pool.map(f, x)
# y_serial == y_parallel!
但是我有两段代码我认为应该遵循这个例子:
#Linear version
price_datas = []
for csv_file in loop_through_zips(data_directory):
price_datas += [process_bf_data_csv(csv_file)]
#Parallel version
p = Pool()
price_data_parallel = p.map(process_bf_data_csv, loop_through_zips(data_directory))
但是并行代码不起作用,而线性代码可以。据我观察,并行版本似乎在生成器中循环(它从生成器函数中打印出日志行),但实际上并没有执行 "process_bf_data_csv" 函数。我在这里做错了什么?
.map 尝试在实际开始工作之前从您的生成器中提取所有值以将其形成一个可迭代对象。
尝试等待更长的时间(直到生成器用完)或改用多线程和队列。
我从简单的例子中了解到,Pool.map 的行为应该与下面的 'normal' python 代码相同,除了并行:
def f(x):
# complicated processing
return x+1
y_serial = []
x = range(100)
for i in x: y_serial += [f(x)]
y_parallel = pool.map(f, x)
# y_serial == y_parallel!
但是我有两段代码我认为应该遵循这个例子:
#Linear version
price_datas = []
for csv_file in loop_through_zips(data_directory):
price_datas += [process_bf_data_csv(csv_file)]
#Parallel version
p = Pool()
price_data_parallel = p.map(process_bf_data_csv, loop_through_zips(data_directory))
但是并行代码不起作用,而线性代码可以。据我观察,并行版本似乎在生成器中循环(它从生成器函数中打印出日志行),但实际上并没有执行 "process_bf_data_csv" 函数。我在这里做错了什么?
.map 尝试在实际开始工作之前从您的生成器中提取所有值以将其形成一个可迭代对象。 尝试等待更长的时间(直到生成器用完)或改用多线程和队列。