【发布时间】:2018-05-05 13:53:34
【问题描述】:
我正在尝试将列表作为参数传递给pool.map(co_refresh, input_list)。但是,pool.map 并没有触发函数co_refresh。而且也没有返回错误。看起来进程挂在那里。
原始代码:
from multiprocessing import Pool
import pandas as pd
import os
account='xxx'
password='xxx'
threads=5
co_links='file.csv'
input_list=[]
pool = Pool(processes=threads)
def co_refresh(url, account, password, outputfile):
print(url + ' : ' + account + ' : ' + password + ' : ' + outputfile)
return;
link_pool = pd.read_csv(co_links, skipinitialspace = True)
for i, row in link_pool.iterrows():
ln = (row.URL, account, password, os.path.join('e:/', row.File_Name.split('.')[0] + '.csv'))
input_list.append(ln)
pool.map(co_refresh, input_list)
pool.close()
但是,它从未触发函数co_refresh。如何使用列表作为参数传递给我的函数?
老问题(简体):
我有下面的 input_list,这是 list 的 list:
[a1, b1, c1, d1]
[a2, b2, c2, d2]
[a3, b3, c3, d3]
我的功能如下:
def func(a, b, c, d)
###
return;
我想为这个功能使用多进程func:
from multiprocessing import Pool
pool = Pool(processes=5)
pool.map(func, input_list)
pool.close()
但是,它从未触发函数func。如何使用列表作为参数传递给我的函数?
【问题讨论】:
-
这不完全是您测试的代码,是吗?它充满了错误。准确发布您尝试过的内容,然后您会得到准确的答案。
-
正如@zvone 建议的那样,您应该与我们分享您测试过的确切代码以及
Python解释器报告的错误。目前您提供的部分不构成可运行的脚本。 -
我已经更新了这个问题。 @Mai,你能帮忙吗?
-
在脚本的顶层,你应该只定义函数和类,而不是实际执行它们。要执行的代码应该从
if __name__ == "__main__"块中调用。这通常是一个好主意,但在多处理的情况下,这是必不可少的。多处理将在另一个进程中再次导入您的模块。事实上,这将导致所有的 coe 再次被执行,而不是你所期望的。
标签: python python-multiprocessing python-pool