**exe.py**
def createProcess(f):
try:
from multiprocessing import Process
newProcess = Process(target=f)
newProcess.start()
newProcess.join()
except:
print "Error creating process"
def lala():
print "success creating process"
print "tying to make a process"
from multiprocessing import Process
newProcess = Process(target=lala)
newProcess.start()
**main.py**
if __name__ == '__main__':
f = open("exe.py", "r")
b = f.read()
f.close()
o = compile(b, "exe.py", "exec")
eval(o)
我收到以下错误
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Program Files\Opsware\agent\lcpython15\lib\multiprocessing\forking.p
", line 374, in main
self = load(from_parent)
File "C:\Program Files\Opsware\agent\lcpython15\lib\pickle.py", line 1378, in
load
return Unpickler(file).load()
File "C:\Program Files\Opsware\agent\lcpython15\lib\pickle.py", line 858, in
oad
dispatch[key](self)
File "C:\Program Files\Opsware\agent\lcpython15\lib\pickle.py", line 1090, in
load_global
klass = self.find_class(module, name)
File "C:\Program Files\Opsware\agent\lcpython15\lib\pickle.py", line 1126, in
find_class
klass = getattr(mod, name)
AttributeError: 'module' object has no attribute 'lala'
稍后编辑
我将 exe.py 更改为
def lala2():
f = open("C:\\work\\asdfas", "w")
f.write("dsdfg\r\n")
f.close()
print "success creating process"
if __name__ == '__main__':
print "tying to make a process"
from multiprocessing import Process, freeze_support
freeze_support()
import pickle
l = pickle.dumps(lala2)
pickle.loads(l)()
newProcess = Process(target=pickle.loads(l))
newProcess.daemon = True
newProcess.start()
if newProcess.is_alive() == True:
print "alive"
else:
print "not alive"
import time
time.sleep(12)
这应该使它可以导入,并且由于 pickle 测试,它表明我的方法是可以选择的。关于它为什么会这样的任何建议?
最佳答案
您使用的是 Windows。不幸的是,在 Windows 上,不可能使用动态代码对象作为多处理的目标,因为多处理的 Windows 实现必须能够导入主模块(技术原因是因为 Windows 缺乏 native fork()
等效项)。请参阅multiprocessing programming guidelines for Windows有关适用限制的更多详细信息。
解决方案是将代码写入文件,然后导入
它来启动服务器。
关于python - 使用 eval 启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265964/