线程中的PyV8 - 如何使其工作?

时间:2012-08-03 16:24:06

标签: python multithreading v8

在主程序中使用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“不喜欢”线程,但我仍然可以将它用于线程化任务吗?

1 个答案:

答案 0 :(得分: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()

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