首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子线程在调用mutagen函数时冻结,直到脚本结束,没有错误。

子线程在调用mutagen函数时冻结,直到脚本结束,没有错误。
EN

Stack Overflow用户
提问于 2013-03-08 05:35:07
回答 1查看 113关注 0票数 0

所以,我正在用python开发一个音乐播放器,当我插入主窗口时,它会启动一个线程,该线程应该从文件中获取元数据。但是,它只是在诱变剂文件函数中的第一次导入调用时停止。

当我使用python.exe直接执行脚本时,它没有问题。但是当我在c++中使用原生python启动脚本时,调用函数的线程就会冻结。但是,我能够从主线程调用函数,没有问题。

main.cpp:

代码语言:javascript
复制
_putenv_s("PYTHONPATH", "python32.zip");

Py_Initialize();
PyRun_SimpleString("import cmw");
Py_Finalize();

cmw.py:

代码语言:javascript
复制
import meta
class MW(QtGui.QMainWindow):
    def __init__(self):
    super().__init__(None)
    ... 
    self.m = meta.Meta()
    self.m.get(lists_of_files)

meta.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
print(3)
... All the code ...
print(4)

输出:

代码语言:javascript
复制
1
2

程序的其余部分运作得很好。没有例外,什么都没有。当脚本退出时

代码语言:javascript
复制
3
4
5

编辑:通过将导入更改为main.cpp中的exec(open().read())来修正它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 10:36:19

奥基托基。如果其他人有这个问题。见编辑

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15287411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档