python multiprocessing 模块Process类的target函数

在最近在学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的区别吧

欢迎大牛批评教导,解决疑惑,谢谢




 

猜你喜欢

转载自www.cnblogs.com/bosha/p/9061887.html
今日推荐