在最近在学python的进程,因为一直在linux下学的,今天到win下测试了一下,发下了个问题代码如下
import multiprocessing as mp
import time
import os
def th():
print("我的父亲是%d" % os.getppid())
time.sleep(2)
while True:
time.sleep(2)
print("我是儿子!")
print("我的父亲是%d" % os.getppid())
p = mp.Process(target=th)
p.daemon = False
p.start()
time.sleep(1)
print("爸爸我over了!", os.getpid())
这段代码在linux运行无错误但是在win下
进过调试发现是Process的target参数出了问题
,za
在linux下(python3.5)这样写参数是没有错误的但是win(python3.6)下就报错了,后来我改了一下,代码如下
import multiprocessing as mp
import time
import os
def th():
print("我的父亲是%d" % os.getppid())
time.sleep(2)
while True:
time.sleep(2)
print("我是儿子!")
print("我的父亲是%d" % os.getppid())
p = mp.Process(target=th())
p.daemon = False
p.start()
time.sleep(1)
print("爸爸我over了!", os.getpid())
我把target=th 改成了target=th()这样居然行了,感觉很不解,百度也没找到理由,明明是把一个函数的引用赋给target,但是这样写不是直接执行了吗,
那这样target得到的不就是函数的返回值了吗。
但是这样解决了问题但是我不明白是怎么一回事,可能是python3.5和3.6的区别吧
欢迎大牛批评教导,解决疑惑,谢谢