所以,我正在用python开发一个音乐播放器,当我插入主窗口时,它会启动一个线程,该线程应该从文件中获取元数据。但是,它只是在诱变剂文件函数中的第一次导入调用时停止。
当我使用python.exe直接执行脚本时,它没有问题。但是当我在c++中使用原生python启动脚本时,调用函数的线程就会冻结。但是,我能够从主线程调用函数,没有问题。
main.cpp:
_putenv_s("PYTHONPATH", "python32.zip");
Py_Initialize();
PyRun_SimpleString("import cmw");
Py_Finalize();cmw.py:
import meta
class MW(QtGui.QMainWindow):
def __init__(self):
super().__init__(None)
...
self.m = meta.Meta()
self.m.get(lists_of_files)meta.py:
import mutagen
class Meta:
def __init__(self):
self.q = Queue()
self.lock = Lock()
self.result = []
def get(self, files):
t = Thread(target=self._work)
t.daemon = True
t.start()
for f in files:
self.q.put(f)
def _work(self):
while True:
f = self.q.get()
print(1)
meta = mutagen.File(f)
with self.lock:
self.result.append(meta)
self.q.task_done()
print("Done")诱变剂init.py:
def File(filename, options=None, easy=False):
print(2)
if options is None:
from mutagen.asf import ASF
... imports lots of files ...
print(5)诱变剂asf.py:
print(3)
... All the code ...
print(4)输出:
1
2程序的其余部分运作得很好。没有例外,什么都没有。当脚本退出时
3
4
5编辑:通过将导入更改为main.cpp中的exec(open().read())来修正它。
发布于 2013-03-09 10:36:19
奥基托基。如果其他人有这个问题。见编辑
https://stackoverflow.com/questions/15287411
复制相似问题