Python线程&多处理错误?

时间:2012-08-04 15:16:38

标签: python linux multithreading multiprocessing

threading.Timermultiprocessing.Process会产生另一个独立于其他主题或流程的流程吗?示例我的代码低于以下内容,假设它进入if语句的一轮,使其执行multiprocessing.Processthreading.Timer,现在是20secs,所以正确它仍在等待40秒以完成代码,但如果它再次执行if语句,它会得到任何错误或什么?它会将第二轮变量传递给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()

2 个答案:

答案 0 :(得分:2)

此:

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

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

此:

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

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

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

答案 1 :(得分:2)

此代码存在一个基本问题:multiprocessing.Process使用fork()创建新进程(除非您使用的是Windows)。通常认为在多线程应用程序中使用fork()是不好的做法; here's a good article

话虽如此,如果你小心的话,应该可能来做这项工作。