2016-01-20 131 views
1

如何在不使用另一個python腳本中的線程和多重處理的情況下多次同時使用不同的PID執行單個python腳本?在沒有線程的情況下同時執行python腳本

,我需要從每個執行

得到的結果我想多處理模塊簡單的程序,我得到了AttributeError: 'module' object has no attribute 'f',它需要在Linux和Windows工作。以前的帖子的解決方案不適合我

經過與以前的帖子驗證後,我再次發佈。

+0

嘗試運行「蟒蛇yourscript.py >>輸出.txt&「幾次?我正在測試這個。您可以在腳本中打印pid。 – BAE

+0

寫腳本中的某個文件代替「>> output.txt」也是很好的做法。如果這符合您的要求,我會提供詳細的答案。 – BAE

+0

爲什麼'multiprocessing.Process'沒有選擇? – BlackJack

回答

1

不同的PID意味着您需要不同的過程。不使用multiprocessing您就可以開始與subprocess模塊另一個進程,並通過stdout得到的結果:

#!/usr/bin/env python 
# coding: utf8 
from __future__ import absolute_import, division, print_function 
import pickle 
import sys 
from subprocess import PIPE, Popen 


def main(): 
    processes = [ 
     Popen([sys.executable, 'test.py'], stdout=PIPE) 
     for _ in xrange(5) 
    ] 
    results = [pickle.loads(p.stdout.read()) for p in processes] 
    for process in processes: 
     process.wait() 
    print(results) 


if __name__ == '__main__': 
    main() 

test.py需要寫的結果與序列化到picklestdout

0

願意幫忙嗎?

用於演示test.py:(just)

import time, os, datetime, fcntl 

with open("output.txt", "a") as g: 
    fcntl.flock(g, fcntl.LOCK_EX) 
    g.write("PID [" + str(os.getpid()) + "]," + str(datetime.datetime.now()) + "\n") 
    fcntl.flock(g, fcntl.LOCK_UN) 


time.sleep(30) 

with open("output.txt", "a") as g: 
    fcntl.flock(g, fcntl.LOCK_EX) 
    g.write("PID [" + str(os.getpid()) + "]," + str(datetime.datetime.now()) + "\n") 
fcntl.flock(g, fcntl.LOCK_UN) 

運行了好幾次:

[email protected]:~/src$ python test2.py & 
[1] 29265 
[email protected]:~/src$ python test2.py & 
[2] 29266 
[email protected]:~/src$ python test2.py & 
[3] 29268 
[email protected]:~/src$ python test2.py & 
[4] 29269 
[email protected]:~/src$ vim test2.py 
[1] Done     python test2.py 
[2] Done     python test2.py 
[3]- Done     python test2.py 
[4]+ Done     python test2.py 

輸出:

[email protected]:~/src$ tail -f -n 100 output.txt 
PID [29265],2016-01-20 16:28:20.373244 
PID [29266],2016-01-20 16:28:21.068946 
PID [29268],2016-01-20 16:28:21.911043 
PID [29269],2016-01-20 16:28:22.547805 
PID [29265],2016-01-20 16:28:50.403474 
PID [29266],2016-01-20 16:28:51.075268 
PID [29268],2016-01-20 16:28:51.914001 
PID [29269],2016-01-20 16:28:52.564706 
相關問題