python - 运行外部串行软件的并行实例
问题描述
我正在尝试编写一个 python 函数,它使用多处理来执行外部串行软件的多个实例。使用下面的代码,我可以“启动”外部软件的所有运行,但实际上只有一个软件实例正在计算(即,每次运行都会生成日志文件,但只有一个实例正在更新日志)。我使用的外部程序的一个问题是它只接受一个特定的输入文件名。我对此的最初解决方案是在等待 10 秒的同时逐个启动进程,这样我就可以在每个进程实例启动后更新这个输入文件的信息。换句话说,我在每个实例启动时编写一个新的输入文件。
总的来说,我想做的是为我的 python 程序分配 X # 个 CPU(通过调度程序),然后让我的 python 程序启动 X # 个外部软件的串行实例,以便所有实例并行运行。在外部软件的所有实例完成之前,我也不应该返回主 python 程序。我感谢任何有用的见解!我对这种并行性比较陌生,所以如果我的问题有一个我看不到的非常简单的解决方案,我深表歉意。
from multiprocessing import Process
from subprocess import call, Popen, PIPE
import time
def run_parallel_serial(n_loops=None, name=None, setting=None):
processes = []
for i in range(1, n_loops+1, 1):
prepare_software_input(n_loop=i, info=name)
processes.append(Process(target=run_software))
count = 0
for p in processes:
update_input(settings[count])
p.start()
time.sleep(10)
count += 1
for p in processes:
p.join()
print("Done running in parallel!")
return
uprepare_software_input 和 update_input 函数用于写入和覆盖外部软件使用的输入文件。run_software 函数使用 subprocess 模块如下
def run_software():
p = Popen([PROGRAM_EXEC, SOFTWARE_INPUT_FILE], stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()
del(p)
return
ps 我没有嫁给多处理。如果有不同模块的替代策略,我很乐意切换。
解决方案
推荐阅读
- python - Django queryset:如何排除具有满足条件的任何相关对象的对象
- excel - 如何将月和日四舍五入到最接近的月或半月
- firefox - Rich:fileUpload 在 JSF 版本 3.3.3 最终版中,1 个文件上传导致文件上传侦听器在 Firefox v69 中运行两次
- mysql - Connection to RDS MySql from ECS Fargate wordpress container times out
- wpf - 如何将国家/地区列表作为 XAML 中组合框的自动完成
- python - 如何将 Django 中的线程替换为 Celery 工作者
- javascript - Svelte 反应性如何在函数内部工作?
- ionic4 - 在 sdk 和 gradle 中设置 android 以在 ionic 中运行 cordova comand 时出错
- java - 爪哇 | 将数据处理程序写入文件的方法花费的时间比预期的要长
- python-3.x - 无法在列表中搜索列表中的记录