这是我的代码片段:
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这一切都是在一个类中运行的。我想逃跑自我邮递3x传递数据中的所有变量)
当我运行时,它显示“postAd()缺少6个必需的位置参数:”“titlesFile”“、”“licLocFile”“、”“subCity”“、”“bodiesMainFile”“、”“bodiesKeywordsFile”“和”“bodiesIntroFile'”
我做错什么了?为什么它只接受2个变量?在
如果我不能使用游泳池地图,我应该怎么做?在
我也尝试过,但没有成功:
^{pr2}$
您的第一次尝试是滥用
partial
。data
是一个单参数:作为一个列表,它不会自动解包其内容。partial
只接受变量参数,因此您应该“正常”传递这些参数或者
^{pr2}$它说
postAd
接收了两个参数而不是一个(data
)的原因是它还隐式地接收了self
参数。在您的第二次尝试是正确的,而且非常接近,但是碰巧in older versions of python pickle (which is essential for multiprocessing) can't handle lambdas。将lambda替换为使用
def
定义的命名函数:旁注:
当lambda只有一个参数时,它被称为}。请注意,
args
,这有点奇怪。如果您的目的是使其灵活并接受变量参数,请使用lambda *args: ...
或甚至lambda *args, **kwargs: ...
来接受关键字参数。名字不重要,只是惯例而已。重要的部分是*
和{partial
有这样一个签名,例如。在我从来没有在第二次尝试中看到过这个问题。我是通过谷歌搜索错误信息才学会的。总是用谷歌搜索。在
相关问题 更多 >
编程相关推荐