Python 升级到3.8.7后后台进程在前台运行

Python 升级到3.8.7后后台进程在前台运行,python,multiprocessing,Python,Multiprocessing,从3.7.6升级到3.8.7 将多处理导入为mp 从多处理导入进程 从时间上导入睡眠 def back_sleep():睡眠(5) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': proc=multiprocessing.Process(目标=back\u sleep,守护进程=True) 程序启动() 错误,我似乎无法四处走动。其他解决方案指向池。也尝试设置Pool() ...spawn.py", line 126, in _main sel

3.7.6
升级到
3.8.7

将多处理导入为mp
从多处理导入进程
从时间上导入睡眠
def back_sleep():睡眠(5)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
proc=multiprocessing.Process(目标=back\u sleep,守护进程=True)
程序启动()
错误,我似乎无法四处走动。其他解决方案指向池。也尝试设置
Pool()

...spawn.py", line 126, in _main self = reduction.pickle.load(from_parent)

AttributeError: Can't get attribute 'back_sleep' on <module '__main__' (built-in)>
…spawn.py”,第126行,在_mainself=reduce.pickle.load(来自_parent)
AttributeError:无法打开属性“返回睡眠”
我希望在后台进程(cpu密集型任务)运行一段时间时,我的shell/内核立即可供用户使用。

在单独的文件(back\u sleep.py)中:

在另一个文件(main.py)中:


然后运行main.py文件。

target=back\u sleep(sec=sec)
是在主进程中运行的函数的即时调用。然后启动另一个进程来运行其返回值,返回值为None。您需要将函数本身传递给
process()
。谢谢。当我这样做时
proc=process(target=back\u sleep,daemon=True)
并调用
proc.start()AttributeError:无法在
上获取属性“back\u sleep”(返回睡眠)您需要更加关注
多处理
文档中的要求-函数定义以外的所有内容都需要在
中,如果
block.@jasonharper我尝试了if语句。同样的错误。另外,if语句的计算结果为True?没有魔法?您还将进程设置为守护进程,当不存在其他非守护进程时退出,主进程立即退出。我更新了答案。使用子进程。您测试了上述内容吗?我测试了。它运行。向上投票。计算了解如何返回输出。看起来将Process的目标函数放在一个单独的.py中也是可行的。子流程的替代方法通常是为了让shell立即可用。最好的方法是subprocess。
from time import sleep

def back_sleep(sec: int):
    sleep(sec)
    print('hey')

sec = 2
back_sleep(sec)
import subprocess
subprocess.Popen([
                "python3",
                "back_sleep.py",
            ])