我尝试通过multiprocessing.Process()在test.py中同时调用a.py和b.py,它工作正常。但是a.py,b.py和test.py的进程 CMD 名称是' / usr / bin / python /tmp/test.py' ;,是相同的。
# ps -ef | grep b.py
UID PID PPID C STIME TTY TIME CMD
501 61486 39878 0 2:33PM ?? 0:00.05 /usr/bin/python /tmp/test.py
501 61487 61486 0 2:33PM ?? 0:00.01 /usr/bin/python /tmp/test.py
501 61488 61486 0 2:33PM ?? 0:00.01 /usr/bin/python /tmp/test.py
我希望这三个流程能够通过&ps; ps -ef'来显示不同的CMD名称。如下所示:(这可以帮助我确定不同的进程是否正在运行。)
# ps -ef | grep b.py
UID PID PPID C STIME TTY TIME CMD
501 61486 39878 0 2:33PM ?? 0:00.05 /usr/bin/python /tmp/test.py
501 61487 61486 0 2:33PM ?? 0:00.01 /usr/bin/python /tmp/a.py
501 61488 61486 0 2:33PM ?? 0:00.01 /usr/bin/python /tmp/b.py
请帮助建议:)
源代码如下:
test.py:
import multiprocessing
import a
import b
p1 = multiprocessing.Process(target=a.printa)
p2 = multiprocessing.Process(target=b.printb)
p1.start()
p2.start()
a.py:
import time
def printa():
while True:
print 'a'
time.sleep(1)
if __name__ == '__main__':
printa()
b.py:
import time
def printb():
while True:
print 'b'
time.sleep(1)
if __name__ == '__main__':
printb()
答案 0 :(得分:0)
您在python中使用a.py
和b.py
作为库,因此它与执行文件test.py
的名称相同。使用multiprocessing
或joblib
时会出现相同的情况。
Process
方法(multiprocessing.Process(self, group=None, target=None, name=None, args=(), kwargs={})
)中有一个名称选项,但正如@fedterzi所说,它仅用于识别目的。
如果要调用流程或文件,可以使用库subprocess。
根据您正在执行的任务,例如对一系列进程进行分析,您还可以使用gnu parallel或bash
之类的其他方法来完成所需的行为。
答案 1 :(得分:0)
阅读Python»2.7.13文档using-the-subprocess-module
从subprocess
NOWAIT 方法中选择,
相应地编辑您的问题代码。
import subprocess
def openCmd(name):
return subprocess.?
if __name__ == '__main__':
while True:
key = raw_input('input 1=open, 0=terminate, q=quit:')
print(key)
if key == '1':
A_p = openCmd(('a'))
B_p = openCmd(('b'))
if key == '0':
A_p.terminate()
B_p.terminate()
if key == 'q':
break
使用Python测试:2.7.9