GAE后台线程并非并行运行

时间:2013-03-17 17:50:11

标签: python multithreading google-app-engine python-2.7 queue

我需要一些帮助来解决GAE后台线程的问题。我正在尝试做的是使用GAE后台线程和队列在多个线程上运行作业。代码在Backend实例上运行,并由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()  

工作已经完成,但是线程一个接一个地运行,所以这个工作需要几个小时才能运行!

1 个答案:

答案 0 :(得分:0)

如果您正在使用后端,那么它将在单个实例上运行,并且在开发服务器上由于python Global Interpreter Lock (GIL)而无法获得并发性。我怀疑那可能是你的问题。另请查看here以了解python无法处理并发,但可以处理线程以提供更好的I / O

编辑

今天有一个新版本的dev_server:引自the blog

  

Python dev_appserver的一次重大改革,这个软件曾经用过   在开发过程中模拟App Engine。新的dev_appserver是   多线程,意味着开发更快,并提供更多   准确模拟生产环境。