簡體   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