在python多处理中使用sh -c {./command a}执行的命令

时间:2011-07-23 12:47:16

标签: python multiprocessing

所以我一直在使用python的多处理来批量执行C程序并在文本文件中编译输出。它工作正常,但由于某种原因,进程不是作为直接系统调用运行,而是通过sh -c {./command;}调用,并且程序不执行队列中的所有调用。

python中的代码如下,如果有人知道它的话,它会很棒。通常在htop上,进程显示为“./rosen 1 100000”或类似的东西,现在它们显示为“sh -c {./rosens 1 10000} 2>%1”我认为应该这样做,但并没有真正起作用。任何想法??

import time
import commands
import multiprocessing
import sys
from multiprocessing import Process, Queue, Lock
from Queue import Empty
import os

def runRosen(q,l):
    while True:
        try:
            x = q.get(block=False)
            [mode, a] = x
            name = './rosen '+str(mode)+" "+str(a)
            s = commands.getoutput(name)
            s = s.split(" ")
            s = str(a)+" "+reduce(lambda x,y: x+" "+y,s,"")
            l.acquire()
            print s
            l.release()

        except Empty:
            break
    return

if __name__ == '__main__':

    #cria nthreads (=numero de cores)
    nthreads=multiprocessing.cpu_count()


    mode = int(sys.argv[1])

    work_queue = Queue()
    for l in range(100000,10000000,100000):
        for repeats in range(0,10,1):
            work_queue.put([mode, l])

    l = Lock()
    #multiprocessamento
    processes = [Process(target=runRosen, args=(work_queue,l)) for i in range(nthreads)]    
    for p in processes:
        p.start()
    for p in processes:
        p.join()

0 个答案:

没有答案