2016-01-20 121 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 
相关问题