Python多处理重新启动应用程序

2024-04-28 16:15:08 发布

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

我是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。在

谢谢


Tags: 代码textname名称mapifmain线程