我想complie python3程序(包括池)与Pyinstall,它有一些错误。 我的程序名是'ls.py公司'时,当我用Pyintall编译程序时,它会生成一个名为'ls.exe文件我运行它,什么也不打印。 我的代码在这里:
from multiprocessing import Pool
def f(x):
print(x*x)
if __name__ == '__main__':
p = Pool(2)
p.map(f,[1,2,3,4])
当我更改代码时:
#from multiprocessing import Pool
def f(x):
print(x*x)
if __name__ == '__main__':
for i in range(1,5):
f(i)
并用Pyinstall编译程序,运行正常! 所以,我认为问题是由
'from multiprocessing import Pool'
所以,请帮我解决这个问题,谢谢
python3.4的Pyinstall版本是PyInstaller-3.2.1-py3.4.egg
编辑2
将
multiprocessing.freeze_support()
添加到代码中,并且作为安全预防措施,将代码移动到main()
函数中,因为我们正在调用if __name__ == "__main__":
工作代码:
编辑1
经过进一步调查,你的方法看起来也很有效。只要改变
print(x*x)
到return x*x
原创帖子
似乎您需要将结果返回到mp线程,收集并打印它。
Pool对象控制工作进程池。作业可以提交到池中,然后池将作业发送给各个工人。一旦作业完成,状态被收集并返回到主进程。你知道吗
如果您将
print(x*x)
更改为return x*x
,并在results = p.map(f,[1,2,3,4])
然后用
print(results)
打印 代码按预期工作。你知道吗
工作代码
输出: win32上的Python 2.7.9(默认,2014年12月10日,12:24:55)[MSC v.1500 32位(Intel)] 键入“copyright”、“credits”或“license()”了解更多信息。你知道吗
相关问题 更多 >
编程相关推荐