Windows任务调度器执行的Python脚本中的多处理

Windows任务调度器执行的Python脚本中的多处理,python,multiprocessing,scheduled-tasks,windows-task-scheduler,Python,Multiprocessing,Scheduled Tasks,Windows Task Scheduler,我有一个使用多处理的Python脚本,我需要Windows任务调度器在每天早上6:45执行。它使用多处理的原因是,如果脚本暂停并且在一小时后仍未完成,则进程将终止 该脚本在手动运行时运行得非常好,但在由任务调度器运行时,它会跳过我试图使用多处理调用的函数中的所有代码。下面是伪代码 import arcpy, multiprocessing set variables def executeThisFunction(): do work if __name__ == '__main_

我有一个使用多处理的Python脚本,我需要Windows任务调度器在每天早上6:45执行。它使用多处理的原因是,如果脚本暂停并且在一小时后仍未完成,则进程将终止

该脚本在手动运行时运行得非常好,但在由任务调度器运行时,它会跳过我试图使用多处理调用的函数中的所有代码。下面是伪代码

import arcpy, multiprocessing

set variables

def executeThisFunction():
    do work

if __name__ == '__main__':
    p = multiprocessing.Process(target=executeThisFunction)
    p.start()

    #Wait for 3600 seconds (1 hour) or until process finishes
    p.join(3600)

    #If thread is still active after 3600 seconds
    if p.is_alive():
        p.terminate()

很明显,当通过Windows任务调度器运行时,我的函数会被跳过,但当通过命令提示符或双击.py文件运行时,一切都会按预期运行。如何解决这个问题,以便在从Windows任务调度器调用时,它可以运行函数中的所有内容?

您是否尝试过使用“main”-guard运行一个非常简单的脚本,但不使用任务调度器进行多处理?这行得通吗?我不知道它是否能在Windows上运行,但一个旧的Unix“诀窍”是获取“Windows任务调度器”的PPID(父进程id)和PID(进程id),看看它们是否相同-然后你就会知道你在该调度器下运行。因此我进一步回顾了脚本,该脚本确实在“主”中运行代码-guard,但无法通过p=multiprocessing.Process(target=executeThisFunction)调用my函数;p、 开始()。我将更新我的问题以澄清这一点。双击.py文件或通过命令提示符手动运行脚本时,executeThisFunction()可以正常工作。是否必须在Windows中执行
freeze\u support()
操作?也许您没有告诉任务调度器正确的Python解释器,而命令提示符确实知道正确的解释器。