使用Django App的主题。服务器:没有CRON或其他外部服务

时间:2011-10-25 14:13:48

标签: django django-views

我想使用一个在Django应用程序内部启动的线程。

如果我们使用标准的Python线程,那么当请求完成时,它可以被网络服务器停止。

有没有标准的方法来做到这一点?或者是否有可用的Django库提供此功能?

1 个答案:

答案 0 :(得分:1)

我强烈地使用线程来处理长进程。当然,更好的解决方案是Celery

定义线程:

from threading import Thread

class afegeixThread(Thread):

    def __init__ (self,usuari, expandir=None, alumnes=None, 
                  impartir=None, matmulla = False):
        Thread.__init__(self)
        self.expandir = expandir 
        self.alumnes = alumnes
        self.impartir = impartir
        self.flagPrimerDiaFet = False
        self.usuari = usuari
        self.matmulla = matmulla

    def run(self):        
        errors = []
        try:
           ...
           self.flagPrimerDiaFet = ...
           ...

    def firstDayDone(self):
        return self.flagPrimerDiaFet

调用线程:

    from presencia.afegeixTreuAlumnesLlista import afegeixThread
    afegeix=afegeixThread(expandir = expandir, alumnes=alumnes, 
                          impartir=impartir, usuari = user, matmulla = matmulla)
    afegeix.start()

    #Waiting for first day done before return html:
    import time
    while afegeix and not afegeix.firstDayDone(): time.sleep(  0.5 )

    #return html code
    return HttpResponseRedirect('/presencia/passaLlista/%s/'% pk )