【发布时间】:2017-02-07 02:45:42
【问题描述】:
这是我的代码片段:
data = [currentAccount.login,currentAccount.password,campaign.titlesFile,campaign.licLocFile,campaign.subCity,campaign.bodiesMainFile,campaign.bodiesKeywordsFile,campaign.bodiesIntroFile]
results = multiprocessing.Pool(5).map(partial(self.postAd,data),range(3))
...
def postAd (self,login,password,titlesFile,licLocFile,subCity,bodiesMainFile,bodiesKeywordsFile,bodiesIntroFile):
...
(让您知道发生了什么:currentAccount 和campaign 是类,它们是这些类中的变量。使用self b/c 这一切都在一个类中运行。我正在尝试运行self.postAd 3x 传递它是我在数据中的所有变量)
当我运行它时,它显示“postAd() 缺少 6 个必需的位置参数:'titlesFile'、'licLocFile'、'subCity'、'bodiesMainFile'、'bodiesKeywordsFile' 和 'bodiesIntroFile'”
我做错了什么?为什么它只接受 2 个变量?
如果我不能使用 Pool map,我应该怎么做?
我也试过了,但没有成功:
results = multiprocessing.Pool(5).map(lambda args: self.postAd(currentAccount.login,currentAccount.password,campaign.titlesFile,campaign.licLocFile,campaign.subCity,campaign.bodiesMainFile,campaign.bodiesKeywordsFile,campaign.bodiesIntroFile), range(3))
Error: Can't pickle <function NewPostService.processNewAds.<locals>.<lambda> at 0x0000000002F3CBF8>: attribute lookup <lambda> on functions failed
【问题讨论】:
-
我也试过这个没有成功: results = multiprocessing.Pool(5).map(lambda args: self.postAd(currentAccount.login,currentAccount.password,campaign.titlesFile,campaign.licLocFile, campaign.subCity,campaign.bodiesMainFile,campaign.bodiesKeywordsFile,campaign.bodiesIntroFile), range(3)) 错误:无法在 0x0000000002F3CBF8> 处腌制
. :属性查找 函数失败 -
您真的希望所有三个调用都完全使用相同的参数吗?我不确定它是否适用于
map,因为它总是希望从它循环的序列中提供一个额外的参数(在这种情况下为range)。您可以通过编写一个忽略其最后一个参数的额外函数(并使用partial(self.postadd, *data))使其工作,但使用您自己的循环创建Processes 可能更容易。 -
是的,我希望它使用相同的参数。我希望相同的过程同时发生 3 次,这就是原因。我将如何做到这一点“但使用您自己的循环创建流程可能更容易。”如果你好心,你能给我一个基于我的代码的例子吗