我是python多处理的新手,遇到了一些我觉得奇怪的行为,但我想这是正常的。下面是一个最小的工作代码:
import multiprocessing
print("Thread name: " + __name__)
def printfunc(text):
print(text)
if __name__ == '__main__':
multiprocessing.freeze_support()
texts=["aaa","bbb"]
pool = multiprocessing.Pool(2)
result = pool.map(printfunc, texts)
pool.close()
我运行这个程序得到的输出是:
^{pr2}$显然,多处理线程不仅从一开始就执行printfunc
函数,而且执行整个代码。显然区分主线程和“子线程”的方法是if __name__ == '__main__':
条件;主线程的名称是__main__
,子线程的名称是__parents_main__
。但是,对于我的工作,我需要冻结我的代码并创建Windows可执行文件,当我运行它时,所有线程的名称都是__main__
,这就造成了问题。在
有没有办法:
a)使应用程序在调用Pool.map
后不会“重新启动”?在
b)如果不可能,如何正确冻结应用程序,使线程具有不同的名称(我使用cx_freeze)?在
c)如果这也是不可能的,如何以任何其他方式防止这种行为?在
我使用python2.7。在
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐