Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取我触发的新进程的开始时间_Python_Multiprocessing - Fatal编程技术网

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

我在python中使用多处理模块并触发许多进程。有没有办法让我知道我触发的每个进程的开始时间

由于进程的触发速度很快,我希望以毫秒甚至纳秒为单位来区分每个进程。 这是我的一段代码

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