1

我需要一些帮助来解决 GAE 后台线程的问题。我想要做的是使用 GAE 后台线程和队列在多个线程上运行作业。代码在后端实例上运行,并被任务队列踢出。我得到的是线程中的作业是串行而不是并行运行的,这有点违背了目的。

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 Global Interpreter Lock (GIL)不可能获得并发。我怀疑这可能是你的问题。也看看这里了解python不能处理并发,但可以处理线程以提供更好的I/O

编辑

今天有一个新版本的 dev_server:引自博客

对 Python dev_appserver 进行了重大改造,该软件用于在开发过程中模拟 App Engine。新的 dev_appserver 是多线程的,这意味着开发速度更快,并提供更准确的生产环境模拟。

于 2013-03-19T09:38:59.917 回答