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()このコードを含む1行:

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 に答える