1

GAEバックグラウンドスレッドの問題を理解するのに助けが必要です。私がやろうとしているのは、GAEバックグラウンドスレッドとキューを使用して、いくつかのスレッドでジョブを実行することです。コードはバックエンドインスタンスで実行され、TaskQueueによってキックされます。私が得ているのは、スレッド内のジョブが並列ではなく直列で実行されているということです。これは、目的を損なうものです。

from Queue import Queue
from google.appengine.api import background_thread
from google.appengine.api import taskqueue

q = Queue()

class Util():
   def work_in_background_thread(self):

       for p in portions:
            q.put(p)

        def _worker(index):
            portion = q.get()                
            do_work(portion)
            q.task_done()


        def do_work(snp_list):
            for snp in snp_list:
                self.find_snp_data(snp)


        for i in range(len(portions)):
            try:
                t = background_thread.BackgroundThread(target=_worker, args=[i])
                t.setDaemon(True)
                t.start()
            except:
                continue

        q.join()  

作業は完了していますが、スレッドが次々に実行されるため、このジョブの実行には数時間かかります。

4

1 に答える 1

0

バックエンドを使用している場合は、単一のインスタンスで実行されており、開発サーバーでは、Pythonグローバルインタープリターロック(GIL)が原因で同時実行を取得できません。それがあなたの問題かもしれないと思います。また、Pythonは同時実行性を処理できませんが、スレッドを処理してより良いI/Oを提供できることを理解するためにここを見てください

編集

今日、dev_serverの新しいリリースがありました:ブログからの引用:

開発中にAppEngineをシミュレートするために使用されるソフトウェアであるPythondev_appserverの大幅なオーバーホール。新しいdev_appserverはマルチスレッドであるため、開発がより高速になり、本番環境のより正確なシミュレーションが提供されます。

于 2013-03-19T09:38:59.917 に答える