萌新请教一下 Python 应该如何并行地调用二进制文件?

2019-03-28 15:10:26 +08:00
 dysxjyy
需要用 Python 调用一个用 C 写的仿真器做仿真,但是仿真器是单线程的,我希望能在服务器上并行。

目前我的办法是写了个脚本用 subprocess 去调用,然后开了好多个终端去执行这个脚本以达到并行的目的。想请教一下有没有更优雅的做法?
1980 次点击
所在节点    Python
5 条回复
no1xsyzy
2019-03-28 15:45:44 +08:00
subprocess 了为什么要好多个终端?直接 Popen 一堆就行了。
dysxjyy
2019-03-28 18:09:40 +08:00
@no1xsyzy
主要是 Popen 貌似有点问题,我是这样写的:
``` python
glps = list(filter(lambda x:'.glp' in x, os.listdir(rootpath+'outputs/')))
num_threads = len(glps)
cmd_list = [['python', 'lithosim_one.py', 'evaluation/lithosim%d/'%i, rootpath+'outputs/'+glps[i]] for i in range(num_threads)]
proc_list = [Popen(cmd, stdout=PIPE, stderr=PIPE) for cmd in cmd_list]
for p in proc_list:
p.wait()
```
假如有 10 个文件要仿真,我的机器是 6 核,它会把 6 个仿完,剩下的 4 个就不继续了,主程序也没有结束。
www5070504
2019-03-28 18:16:45 +08:00
@dysxjyy 用线程行不 解释器锁会切换线程的
haddy
2019-03-28 18:27:10 +08:00
试试这个包。https://github.com/kennethreitz/delegator.py
如果觉得有用,可以点主页上的 saythanks.io 的链接对作者表示感谢。
dysxjyy
2019-03-28 18:36:21 +08:00
@www5070504 @haddy @no1xsyzy 问题解决了,感谢回复。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/549550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX