【发布时间】:2018-04-12 22:08:17
【问题描述】:
如果模块“user.py”与代码位于同一目录中,则以下代码有效,但如果位于不同目录中,则失败。我收到的错误消息是“ModuleNotFoundError: No module named 'user'
import multiprocessing as mp
import imp
class test():
def __init__(self,pool):
pool.processes=1
usermodel=imp.load_source('user','D:\\pool\\test\\user.py').userfun
#file D:\\pool\\test\\user.py looks like this:
# def userfun():
# return 1
vec=[]
for i in range(10):
vec.append([usermodel,i])
pool.map(self.myfunc,vec)
def myfunc(self,A):
userfun=A[0]
i=A[1]
print (i,userfun())
return
if __name__=='__main__':
pool=mp.Pool()
test(pool)
如果函数 myfunc 在没有池化进程的情况下调用,则无论 user.py 是在主代码的同一目录中还是在 \test 中,代码都可以。为什么池化进程在单独的目录中找不到 user.py?我尝试了不同的方法,例如修改我的路径然后导入用户和 importlib,结果都相同。
我使用的是 Windows 7 和 python 3.6
【问题讨论】:
-
试试
open('D:\\pool\\test\\user.py', 'r').close()。你有任何错误吗? -
首先,您使用的是哪个版本的 Python? (而且,如果不是 2.7 或 3.3,你为什么使用
imp?) -
其次,给我们完整的回溯,而不仅仅是错误信息。
-
无论如何,我无法在 3.6 中重现此问题。在 2.7 中,我必须进行各种更改才能达到这一点——首先你不能将
self.myfunc传递给Pool.map,因为它不能被腌制。一旦我修复了所有这些,它基本上和self.myfunc一样的问题——user.userfun也不能被腌制。 -
@smac89 - 尝试打开和关闭文件时没有错误。
标签: python multiprocessing imp