2017-04-12 187 views
2

我嘗試通過multiprocessing.Process()在test.py中同時調用a.py和b.py,它工作正常。但是進程CMD'/ usr/bin/python /tmp/test.py'的a.py,b.py和test.py的名稱是相同的。以不同的CMD名稱同時運行多個python腳本

# 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 -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

這是我的問題的解決方案,但似乎有點通過列出蟒蛇xxx.py&** **的行奇。 http://stackoverflow.com/questions/28549641/run-multiple-python-scripts-concurrently –

+1

使用'Subprocess'而不是'Process' – stovfl

+0

@stovfl'subprocess'可以調用模塊的特定方法嗎?謝謝。 –

回答

0

您正在使用a.pyb.py在蟒蛇庫,因此它是根據同名稱爲執行的文件test.py。使用multiprocessingjoblib發生相同的情況。

Process方法(multiprocessing.Process(self, group=None, target=None, name=None, args=(), kwargs={}))中有一個名稱選項,但@fedterzi說,它僅用於識別目的。

如果你想調用一個進程或文件,你可以使用庫subprocess

根據您正在執行,如parellelizing一堆進程的任務,你也可以在爲了完成你想要的行爲,請使用gnu parallel或其他方法,通過bash

+1

不,進程的名稱不會改變進程標題,只是爲了標識目的 – fedterzi

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

+0

'return subprocess。?'是什麼?意思?謝謝:) –

+0

@WillZhou:'subprocess。?'是一個佔位符。閱讀建議的文檔並從'subprocess'模塊中選擇一種方法。 – stovfl