2014-03-26 73 views
0

我運行一個web項目。
如果發生某些事件,我想啓動一個線程來完成一項工作。
之前,我總是寫多線程program.Such如下
python創建單線程做一個任務,然後退出

class FetchThread(threading.Thread): 
    def __init__(self, profile_queue): 
     .... 
    def run(self): 
     while true: 
     .... 

但這裏只有一個任務,我不想運行的所有的時間一個線程。
我想線程只是做一件事,然後退出。但我總是看到其他人寫while TrueThread.run,我不知道方法2是否是一個好方法。任何人都可以提供幫助嗎?

1.

class FetchThread(threading.Thread): 
    def __init__(self, profile_queue): 
     .... 
    def stop(self): 
     self.__running = False 
    def run(self): 
     while self.__running: 
     .... 
     self.stop() 

2.

class FetchThread(threading.Thread): 
    def __init__(self, profile_queue): 
     .... 
    def run(self): 
     .... 

回答

0

如果你可以封裝你的整個任務到一個單一的功能,你可以使用默認的Thread類和傳遞正確的參數。

def a_task(callback): 
    # do your task here 
    callback() 

def some_callback(): 
    # some way to notify that the task is completed 
    pass 


task = Thread(target=a_task, 
       kwargs={'callback': some_callback}) 
task.start() 

如果你的web項目涉及龍捲風,a previous answer I provided可能是你的興趣。

0

把你想在一個普通函數做,並調用它,像這樣的工作:

>>> def job_func(arg): 
...  do_work(arg) 
>>> Thread(target=job_func, args=(arg,)).start()