Я пытаюсь использовать модуль python fbx из autodesk, но, похоже, я не могу выполнить ни одну операцию. Это похоже на то, что GIL не перестал. Кто-нибудь нашел ту же проблему, или я делаю что-то неправильно? Когда я говорю, что это не работает, я имею в виду, что код не освобождает поток, и я не могу ничего делать, пока работает код fbx.Autodesk's Fbx Python и threading
Существует не так много кода для публикации, просто чтобы узнать, не случилось ли с кем-нибудь попробовать.
Update:
вот пример кода, пожалуйста, обратите внимание, каждый файл FBX что-то вроде 2 Гб
import os
import fbx
import threading
file_dir = r'../fbxfiles'
def parse_fbx(filepath):
print '-' * (len(filepath) + 9)
print 'parsing:', filepath
manager = fbx.FbxManager.Create()
importer = fbx.FbxImporter.Create(manager, '')
status = importer.Initialize(filepath)
if not status:
raise IOError()
scene = fbx.FbxScene.Create(manager, '')
importer.Import(scene)
# freeup memory
rootNode = scene.GetRootNode()
def traverse(node):
print node.GetName()
for i in range(0, node.GetChildCount()):
child = node.GetChild(i)
traverse(child)
# RUN
traverse(rootNode)
importer.Destroy()
manager.Destroy()
files = os.listdir(file_dir)
tt = []
for file_ in files:
filepath = os.path.join(file_dir, file_)
t = threading.Thread(target=parse_fbx, args=(filepath,))
tt.append(t)
t.start()
Просьба также поделиться кодом, который не выпускает нить. Вы получите лучший ответ. Прямо сейчас у нас даже не будет представления о том, что вы делаете или пытаетесь достичь. –
Интерпретатор фактически никогда не выполняет одновременно код Python из-за GIL. GIL обычно выпускается только при выполнении ввода-вывода, и текущий поток ожидает его завершения. Пока это происходит, для любых ожидающих потоков будет предоставлена возможность запуска. Таким образом, ваша проблема может не иметь никакого отношения к тому факту, что вы используете модуль fbx. – martineau
@MoinuddinQuadri, код примера загружен. – hdd