繁体   English   中英

GAE背景线程未并行运行

[英]GAE background Threads not running in parallel

我需要一些帮助来解决GAE后台线程的问题。 我正在尝试使用GAE后台线程和Queue在多个线程上运行作业。 该代码在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()  

工作已经完成,但是线程又一个接一个地运行,因此该工作要花几个小时才能运行!

如果您使用的是后端,那么它将在单个实例和开发服务器上运行,这是由于python Global Interpreter Lock(GIL)导致无法实现并发。 我怀疑这可能是您的问题。 还可以在这里了解python无法处理并发,但可以处理线程以提供更好的I / O

编辑

今天,有一个新版本的dev_server:从博客引用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM