2016-07-26 73 views
0

我想在隊列中運行多個任務。任務來自用戶輸入。我試過的是用ThreadPoolExecutor屬性創建一個單例類,並向其中添加任務。這些任務可以很好地添加,但是看起來只有第一組任務有效。以下內容已添加但未執行。Django後臺執行器

class WebsiteTagScrapper: 
    class __WebsiteTagScrapper: 
     def __init__(self): 
      self.executor = ThreadPoolExecutor(max_workers=5) 
    instance = None 

    def __new__(cls): # __new__ always a classmethod 
     if not WebsiteTagScrapper.instance: 
      WebsiteTagScrapper.instance = WebsiteTagScrapper.__WebsiteTagScrapper() 
     return WebsiteTagScrapper.instance 
+0

你也許可以發佈一個MCVE(http://stackoverflow.com/help/mcve)?或者_至少_這個東西是如何在你的代碼中實際使用的? –

+0

另外,請注意,Django通常使用多處理服務,甚至有時在負載均衡器後面的多個服務器上服務,所以對於給定服務器的給定進程,您的「單例」將只是「單個」。它不會在進程和服務器之間共享...... –

+0

@brunodesthuilliers哦哇,很高興知道。我在我的api中調用這個類,並將來自POST的輸入url作爲參數傳遞 –

回答

0

我在我的一個項目中沒有使用芹菜使用多進程,因爲我認爲這對我的使用來說是過度的。 也許你可以做這樣的事情:

from multiprocessing import Process 

class MyQueuProcess(Process): 
    def __init__(self): 
     super(MyQueuProcess, self).__init__() 
     self.tasks = [] 


    def add_task(self, task): 
     self.tasks.append(task) 


    def run(self): 
     for task in self.tasks: 
      #Do your task 

你只需要在視圖中創建一個實例,建立你的任務,然後run()。此外,如果您需要訪問數據庫,則需要在子女中使用import django,然後製作django.setup()