用Pyins编译python3程序(包括池)

2024-05-29 03:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想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


Tags: 代码namefromimport程序ifmaindef
1条回答
网友
1楼 · 发布于 2024-05-29 03:54:26

编辑2

multiprocessing.freeze_support()添加到代码中,并且作为安全预防措施,将代码移动到main()函数中,因为我们正在调用if __name__ == "__main__":

工作代码:

import multiprocessing
def main():
    p = multiprocessing.Pool(2)
    print(p.map(f, [1, 2, 3]))

def f(x):
    return x*x

if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()

编辑1

经过进一步调查,你的方法看起来也很有效。只要改变 print(x*x)return x*x

def f(x):
    return x*x

原创帖子
似乎您需要将结果返回到mp线程,收集并打印它。
Pool对象控制工作进程池。作业可以提交到池中,然后池将作业发送给各个工人。一旦作业完成,状态被收集并返回到主进程。你知道吗

如果您将print(x*x)更改为return x*x,并在 results = p.map(f,[1,2,3,4])
然后用print(results)
打印 代码按预期工作。你知道吗

工作代码

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    p = Pool()
    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()”了解更多信息。你知道吗

================================ RESTART ================================

[1, 4, 9, 16]

相关问题 更多 >

    热门问题