Python 获取我触发的新进程的开始时间
我在python中使用多处理模块并触发许多进程。有没有办法让我知道我触发的每个进程的开始时间 由于进程的触发速度很快,我希望以毫秒甚至纳秒为单位来区分每个进程。 这是我的一段代码Python 获取我触发的新进程的开始时间,python,multiprocessing,Python,Multiprocessing,我在python中使用多处理模块并触发许多进程。有没有办法让我知道我触发的每个进程的开始时间 由于进程的触发速度很快,我希望以毫秒甚至纳秒为单位来区分每个进程。 这是我的一段代码 import multiprocessing import time def myProcess(processName): print "This is a method that will run in parallel: processName" time.sleep(120) num = 1
import multiprocessing
import time
def myProcess(processName):
print "This is a method that will run in parallel: processName"
time.sleep(120)
num = 100
for n in range(1,num):
processName = "Process %s" % n
proc = multiprocessing.Process(target=myProcess,args=(processName))
proc.start()
proc.join()
print "process startTime: %s " ?????
不要那样做<代码>多处理。进程对象有一个
pid
属性——进程ID,它是进程在操作系统级别的唯一标识符。使用它。您可以编写自己的包装器类来记录startime-
class Proc(object):
def __init__(self,cmd)
self.cmd = cmd
def run(self):
proc = multiprocessing.Process(target=myProcess,args=(args))
self.startime = datetime.datetime.now()
proc.start()
proc.join() // Don't use this if you don't want to wait.
procobj = Proc(cmd)
procobj.run()
procobj.startime // gives you starttime
您可以将
队列
传递给流程,并将开始时间保存在那里:
def myProcess(processName,times):
print "This is a method that will run in parallel: processName"
times.put((processName,time.time()))
time.sleep(120)
q = multiprocessing.Queue()
for n in range(num):
processName = "Process %s" % n
proc = multiprocessing.Process(target=myProcess,args=(processName,q))
proc.start()
proc.join()
while not q.empty():
a = q.get()
print a
"%s startTime: %f" % a
是的,我试过,'proc.pid'。但我不确定如何从中获取开始时间。我回答的全部要点是,您不应该使用开始时间来标识每个流程(因为PID是流程的标准唯一标识符)。(如果您想知道进程的启动顺序,只需在启动时将它们添加到列表中即可。)PID在操作系统级别上不是唯一的。同一PID可以有不同的过程。。。只是不在同一时间。操作系统可以自由地将旧的PID重新用于新流程。如果需要真正的唯一标识符,请使用该对
(开始时间,PID)
。在进程结束时仅依赖PID是不可靠的。procobj.run()
将导致主程序挂起,直到子进程完成为止(由于join()
调用)。确实如此。有点破坏了并行化的意义,不是吗P