我是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()
我从运行中获得的输出是:
Thread name: __main__
Thread name: __parents_main__
Thread name: __parents_main__
aaa
bbb
显然,多处理线程不仅执行printfunc
函数,而且从头开始执行整个代码。显然,区分主线程和“子”线程的方法是if __name__ == '__main__':
条件;主要帖子的名称是__main__
,儿童名字是__parents_main__
。但是对于我的工作,我需要冻结我的代码并创建Windows可执行文件,当我运行它时,所有线程都有名称__main__
,这会产生问题。
有办法:
a)在调用Pool.map
?
b)如果不可能,如何正确冻结应用程序,以便线程有不同的名称(我使用cx_Freeze)?
c)如果这也是不可能的,那么如何以任何其他方式防止这种行为?
我使用的是python 2.7。
由于