首页 > 解决方案 > 运行相同任务时的进程与线程[Python 3.9]

问题描述

我知道关于线程与处理有很多问题。我了解它们的一些基础知识以及使用其中任何一个的优缺点;有这个脚本时问题开始了:

from multiprocessing import Process
from threading import Thread
from time import sleep

LOGO = """
                        
   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
 @@@@********************************************************@@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
@@@@**********************************************************@@@
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
"""

def long_task():
    print("Started long task inside subprocess")
    sleep(10)
    print("Ended long task inside subprocess")

def main():
    global LOGO
    print(LOGO)

    # create subprocess
    process = Process(target=long_task)

    # start subprocess
    process.start()

    # join subprocess
    process.join()
    
    print("Finished main process")
    

if __name__ == "__main__":
    main()

当我运行脚本时,发生了一些奇怪的事情;创建的进程没有打印想要打印的所有 2 条消息,而是等待sleep()函数给出的指定时间;还不明白为什么会发生这种情况,并且在使用Thread()(来自threading模块)时它按预期工作;打印 2 条给定的消息

pyinstaller当我使用包含 Processes 的脚本模块创建 .exe 文件时,也发生了一些奇怪的事情:它在启动此类定义的进程时重新启动了所有程序

为什么会这样?

编辑1:

我使用pyinstaller我在这里编写的脚本创建了一个 .exe 文件,并且程序似乎崩溃了;LOGO只是一遍又一遍地打印 hte变量不知道为什么

这是一个pyinstaller错误还是这里发生了什么?

标签: python-3.xmultithreadingpyinstallermultiprocessgil

解决方案


推荐阅读