我正在远程服务器上运行几个cat | zgrep
命令,并分别收集它们的输出以进行进一步处理:
class MainProcessor(mp.Process):
def __init__(self, peaks_array):
super(MainProcessor, self).__init__()
self.peaks_array = peaks_array
def run(self):
for peak_arr in self.peaks_array:
peak_processor = PeakProcessor(peak_arr)
peak_processor.start()
class PeakProcessor(mp.Process):
def __init__(self, peak_arr):
super(PeakProcessor, self).__init__()
self.peak_arr = peak_arr
def run(self):
command = 'ssh remote_host cat files_to_process | zgrep --mmap "regex" '
log_lines = (subprocess.check_output(command, shell=True)).split('\n')
process_data(log_lines)
但是,这会导致子进程的顺序执行('ssh。。。猫…’)命令。第二个高峰等待第一个高峰结束,以此类推。
如何修改此代码以使子流程调用并行运行,同时仍然能够单独收集每个调用的输出?
不需要
multiprocessing
或threading
来并行运行子进程,例如:它同时运行5个shell命令。注意:这里既不使用线程也不使用
multiprocessing
模块。没有必要在shell命令中添加与号和&
:Popen
不会等待命令完成。您需要显式调用.wait()
。这很方便,但不必使用线程从子进程收集输出:
相关:Python threading multiple bash subprocesses?。
下面是在同一线程中同时从多个子进程获取输出的代码示例:
另一种方法(而不是将shell进程放在后台的其他建议)是使用multithreading.
然后,您所拥有的
run
方法将执行如下操作:要收集结果,可以执行以下操作:
在多线程链接中运行上述线程。当线程对象的myThread.finished==True时,可以通过myThread.results收集结果。
相关问题 更多 >
编程相关推荐