所以我一直在使用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()