2016-07-26 3 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()을 작성해야합니다.