- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用名为 Abaqus/CAE1 的商业应用程序,它带有内置的 Python 2.6 解释器和 API。我已经开发了一个长时间运行的脚本,我试图使用 Python 的 multiprocessing
将其拆分为同时进行的独立任务。模块。但是,一旦生成进程就会挂起。
脚本本身使用各种对象/方法,只能通过 Abaqus 的专有 cae
获得模块,只能通过首先启动与 Abaqus/CAE 捆绑的 Python 来加载,然后使用 Python 的 execfile
执行我的脚本.
为了尝试让多处理工作,我尝试运行一个脚本来避免访问任何 Abaqus 对象,而是只执行计算并将结果打印到文件2 。这样,我可以从常规系统 Python 安装以及从与 Abaqus 捆绑在一起的 Python 运行相同的脚本。
下面的示例代码在使用以下任一命令从命令行运行时按预期工作:
C:\some\path>python multi.py # <-- Using system Python
C:\some\path>abaqus python multi.py # <-- Using Python bundled with Abaqus
这会生成新进程,每个进程都会运行该函数并将结果按预期写入文件。但是,当使用以下命令从 Abaqus/CAE Python 环境调用时:
abaqus cae noGUI=multi.py
然后 Abaqus 将启动,自动导入它自己的专有模块,然后使用以下命令执行我的文件:
execfile("multi.py", __main__.__dict__)
其中全局命名空间 arg __main__.__dict__
由 Abaqus 设置。然后,Abaqus 会成功 check out 每个进程的许可证,生成新进程,然后……就是这样。进程已创建,但它们都挂起并且什么也不做。没有错误消息。
可能是什么原因导致挂断,我该如何解决?是否有必须设置的环境变量?是否有其他使用类似程序的商业系统可供我学习/效仿?
请注意,任何解决方案都必须在 Python 2.6 中可用标准库。
系统详细信息:Windows 10 64 位、Python 2.6、Abaqus/CAE 6.12 或 6.14
示例测试脚本:
# multi.py
import multiprocessing
import time
def fib(n):
a,b = 0,1
for i in range(n):
a, b = a+b, a
return a
def workerfunc(num):
fname = ''.join(('worker_', str(num), '.txt'))
with open(fname, 'w') as f:
f.write('Starting Worker {0}\n'.format(num))
count = 0
while count < 1000: # <-- Repeat a bunch of times.
count += 1
a=fib(20)
line = ''.join((str(a), '\n'))
f.write(line)
f.write('End Worker {0}\n'.format(num))
if __name__ == '__main__':
jobs = []
for i in range(2): # <-- Setting the number of processes manually
p = multiprocessing.Process(target=workerfunc, args=(i,))
jobs.append(p)
print 'starting', p
p.start()
print 'done starting', p
for j in jobs:
print 'joining', j
j.join()
print 'done joining', j
1广为人知的有限元分析包
2该脚本是 fib()
的相当标准的 Python 函数的混合体,以及来自 PyMOTW 的示例
最佳答案
我必须写一个答案,因为我还不能发表评论。
我可以想象的原因是 python 多处理产生了一个全新的进程,它有自己的非共享内存。因此,如果您在脚本中创建一个对象,启动一个新进程,该新进程包含内存的副本,并且您有两个可以进入不同方向的对象。当原始 python 进程(我怀疑)中存在 abaqus 的某些内容时,它也被复制了,而这个副本可能会产生这样的行为。
作为解决方案,我认为您可以 extend python with C (能够在单个进程中使用多个内核)并在那里使用线程。
关于来自 Abaqus/CAE 的 Python 多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44146116/
当我尝试使用以下命令从 Windows 命令行运行 Abaqus PDE(Python 开发环境)时: abaqus cae -pde 我在命令行中收到以下错误: pde:atxGuiSvr.ipcS
我正在对一些 Abaqus 模拟进行参数化扫描,因此我正在使用 waitForCompletion()防止脚本过早运行的功能。然而,有时参数组合会导致模拟在扫描中的一个或两个参数上挂起大约半小时到一个
我正在尝试在 Abaqus 中应用塑性应变初始条件,如下所示: ** ----------------------------------------------------------------
我正在尝试获取曲面中每个面的法线(编辑:曲面是从实体中提取的,而不是从壳中提取的)。我似乎无法获得面部物体。根据scripting reference guide这应该是语法: mdb.models[
我正在尝试优化某种 Material 的孔隙率分布。我想可视化结果。我可以使用'visualize->material'来可视化不同的 Material ,但是他给每种 Material 随机颜色。我
我正在尝试制作一个 python 脚本来从 ODB 文件(来自 abaqus)中提取节点坐标。到目前为止,我已经想出了下面附加的代码(不要介意我放在#后面的额外信息,有时它只是为了让我可以跟踪我在做什
我将 Abaqus 2020 链接到英特尔 oneAPI ifort 编译器,它运行正常,直到出现此问题。当我尝试使用 /iface:cref 时出现“错误 LNK2019:函数 umat.R 中引用
我是 Abaqus Python 脚本新手。我的脚本中的以下代码行引发关键字错误(类型错误:mergeWire 上的关键字错误)。 myPart.WirePolyLine(points = myPoi
有没有办法用abaqus测量/计算生成模型的表面积? 我熟悉 abaqus CAE 或脚本版本中的工具 -> 查询... -> 质量属性: from abaqus import * prop=mdb.
我在 Abaqus 中编写脚本,在那里我用切圆(如奶酪)粉碎圆形和正方形。我需要在部件之间放置 Contact,所以我需要 Surface。 宏管理器生成: s1 = a.instances['kol
Abaqus 无法找到 C++ 编译器。我需要在 Abaqus 和 Intel Parallel Studio 之间设置一个需要 Visual Studio 的接口(interface)。无论我使用什
我用 python 编写了一个脚本,用于在 Abaqus 中对一组文件进行后处理。该脚本按顺序打开abaqus输出数据库文件,读取多个节点的结果,将这些结果写入.txt文件中并关闭odbs(输出数据库
我想为 Abaqus 创建一个 Python 脚本,其中将使用 Scipy 库。不幸的是,Abaqus 没有那个库。它可以安装,但我想以不同的方式进行。 我的想法是编写一个函数,该函数将接受参数,将其
我正在使用 Abaqus/Python 进行有限元分析。我遇到了以下问题:我有一个 3D 域,它由包含边和圆段的 2D 域组成,并且在三维中拉伸(stretch)。现在我想对该域进行网格划分,约束条件
Abaqus 选择的默认元素是 C3D8R,我想将其更改为 C3D8I。我知道如何在 CAE 中更改元素类型,甚至使用 Python 递归更改元素类型,但不知道如何更改默认值。 问题是,当我分区和重新
我正在尝试使用 abaqus-ython 脚本来提取节点坐标。为此,我首先提取原始节点位置,然后添加位移值。 但是对于我的 abaqus 模型之一,我注意到我提取的位移值与我在 abaqus 中找到的
在ubuntu上安装Abaqus CAE,选择安装目录后继续,出现如下错误 Creating child process failed. Log ID is 0001 Action LaunchAPp
当我运行时 call abaqus job=some_name interactive 可能会发生两件事: 如果这是我第一次运行该作业,则不会进行任何查询。 但是,如果工作存在,我会收到此消息: O
我希望能够运行一个简单的命令来检索 Abaqus 的事件版本。 我曾希望 abaqus -v 或 abaqus -version 可以工作。但是,这些命令无效。 运行 abaqus whereami
我希望能够运行一个简单的命令来检索 Abaqus 的事件版本。 我曾希望 abaqus -v 或 abaqus -version 可以工作。但是,这些命令无效。 运行 abaqus whereami
我是一名优秀的程序员,十分优秀!