threading.Timer
和multiprocessing.Process
会产生另一个独立于其他主题或流程的流程吗?示例我的代码低于以下内容,假设它进入if
语句的一轮,使其执行multiprocessing.Process
和threading.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()
答案 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。
话虽如此,如果你小心的话,应该可能来做这项工作。