1

是否threading.Timermultiprocessing.Process产生另一个独立于其他进程或进程的进程?示例我的代码如下所示,假设它经过一轮if语句,使其执行multiprocessing.Processand threading.Timer,现在是 20 秒,所以它仍然等待 40 秒才能完成代码,但如果它if再次执行到语句中,它会得到任何错误或什么吗?它会将第二轮 var 传递给 the并在第一轮之上myFunction2执行另一个?myFunction3

def myFunction3():
    #some stuffs

def myFunction2(a,b):
    time.sleep(60)
    subprocess.Popen([.....],....) #with a var
    subprocess.Popen([.....],....) #with b var

def myFunction():
    if data in a:
       subprocess.Popen([.....],....)
       p = multiprocessing.Process(target=myFunction2,args=(a,b))
       p.start()
       threading.Timer(60, myFunction3).start()

if __name__=='__main__':
    while True:
       myFunction()
4

2 回答 2

2

这段代码存在一个基本问题:multiprocessing.Process 使用 fork() 创建新进程(除非您使用的是 Windows)。人们普遍认为,在多线程应用程序中使用 fork() 是不好的做法。这是一篇好文章

话虽如此,如果您小心的话,应该可以完成这项工作。

于 2012-08-05T00:04:41.963 回答
2

这个:

p = multiprocessing.Process(target=myFunction2,args=(a,b))
p.start()

将创建一个新进程并myFunction2在该进程中运行该函数。

这个:

threading.Timer(60, myFunction3).start()

将在当前进程中创建一个新线程并在该myFunction3线程中运行该函数。

一个进程可以包含多个线程,所有线程共享相同的地址空间,但进程之间不共享相同的地址空间。

于 2012-08-04T23:38:53.920 回答