4

在主程序中使用PyV8是可以的。
但即使我在 1 个线程中运行它(不是主程序本身,而是其中的 1 个附加线程)

class TaskThread(threading.Thread):
    def __init__(self, task):
        threading.Thread.__init__(self)
        self.task = task

    def run(self):
        try:
            self.task.run()
        except Exception as e:
            pass

self.task.run()具有此代码的单行:

context = PyV8.JSContext(self.window)     # <- this stops everything

冻结整个程序。

我已经了解 PyV8“不喜欢”线程,但我仍然如何将它用于线程任务?

4

1 回答 1

3

我想我在查看http://code.google.com/p/pyv8/source/browse/trunk/PyV8.py时找到了解决方案

如果你像这样启动线程:

t = YourThreadClass()
t.daemon = True
t.start()

只需以这种方式启动它:

with PyV8.JSLocker():
    t.start()

当您需要运行 javascript 时:

with PyV8.JSLocker():
    self.context.enter()
    print self.context.eval('1+1')
    self.context.leave()

看起来它解决了这个问题。

于 2012-08-03T18:45:38.727 回答