在主程序中使用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“不喜欢”线程,但我仍然可以将它用于线程化任务吗?
答案 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()
看起来它解决了这个问题。