![](/img/trans.png)
[英]How do i query the parts' volume information with abaqus python script in abaqus/cae and abaqus/viewer mode?
[英]Python multiprocessing from Abaqus/CAE
我正在使用一個名為Abaqus / CAE 1的商業應用程序,內置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成功檢查每個流程的許可證,生成新流程,......就是這樣。 這些進程已創建,但它們都掛起並且什么都不做。 沒有錯誤消息。
什么可能導致掛斷,我該如何解決? 是否有必須設置的環境變量? 是否有其他商業系統使用類似的程序,我可以從中學習/模仿?
請注意,任何解決方案都必須在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廣為人知的有限元分析包
我必須寫一個答案,因為我還不能發表評論。
我可以想象的一個原因是python多處理使用它自己的非共享內存產生了一個全新的進程。 因此,如果您在腳本中創建一個對象,則啟動一個新進程,該新進程包含一個內存副本,並且您有兩個可以進入不同方向的對象。 當原始python進程中存在一些abaqus(我懷疑)時,它也會被復制,這個副本可能會產生這種行為。
作為一種解決方案,我認為您可以使用C擴展python (它可以在單個進程中使用多個核心)並在那里使用線程。
只是想說我遇到了這個問題。 我目前的解決方案是划分我的腳本。 如果您嘗試在給定模型上運行參數掃描,或在同一模型上運行幾何變化等,這可能對您有用。
我首先生成腳本來完成我的建模過程的每個部分:
通過這些創建,我使用文本替換來快速生成每種類型的N個python腳本,每個我感興趣的離散參數集一個。
然后我在Python中編寫了一個並行處理工具,將多個Abaqus實例作為子進程調用。 這樣做如下:
通過subprocess.call為每個模型生成腳本調用CAE。 該腳本允許您選擇一次運行多少個實例,以防止您在服務器上獲取每個許可證。
使用相同的生成模型執行Abaqus解算器,每個作業的核心參數和使用的核心總數。
使用與1相同的過程提取數據。
在生成模型時反復檢查CAE的許可證會有一些開銷,但在我的測試中,能夠同時生成10個以上輸入文件的好處遠遠超過它。
如果您認為上面概述的過程對您的應用程序有幫助,我可以將一些腳本放在Github上。
干杯,內森
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.