我正在尝试使用多处理中的缓冲池来加快我的读/写功能。但是,当我尝试使用pyinstaller并通过exe运行它时。的 结果是产生了一个新进程的新进程产生了一个 无限量地重新处理新流程,直到我注销并强制操作系统 终止我的所有用户进程。我不知道发生了什么
在pycharm中运行甚至在运行.py时运行代码都没有问题。
版本为python 3.6.3。
平台:Windows 7
代码如下:
if __name__ == "__main__":
pool = Pool(2)
pool.map(readwritevalue, [file for file in gettxtpath()])
pool.close()
pool.join()
GetFormated() ##Get the Final output of .csv
Getxlsx() ##Get the Report.xls
GetDocx() ##Get the docx format
t1 = time.time()
print("Parallel time{t}s".format(t=time.time() - t1))
请您对此进行说明?
我在Google上搜索过,一些答案是将多处理模块放在“ __name__=="__main__
”下,但是,我已经这样做了,那么还有什么会导致进程的无限爆炸?
非常感谢您。
答案 0 :(得分:1)
感谢MilanVelebit帮助找出答案。
我在这里发布答案。 导入多处理程序并使用pyinstaller时,只需添加一行即可。
from multiprocessing import Pool,freeze_support
if __name__ == "__main__":
##Add support for when a program which uses multiprocessing has been frozen to produce a Windows executable. (Has been tested with py2exe, PyInstaller and cx_Freeze.)
#One needs to call this function straight after the '__main__' line of the main module.
freeze_support()
t1 = time.time()
pool = Pool(2)
pool.map(readwritevalue, [file for file in gettxtpath()])
pool.close()
pool.join()
GetFormated() ##Get the Final output of Xunjian-Report.csv
Getxlsx() ##Get the Xunjian-Report.xls
GetDocx() ##Get the docx format
print("Cost time {t}".format(t=time.time() - t1))