Python守护线程被多次运行的问题【摘记】

前两天学习Python守护线程的时候逛论坛偶遇这样一个帖子,记录问题如下:


我想在启动web服务器的时候想开启两个线程 threading.Thread , 

t1 = TimeDaemon(60) #这个线程的目的是每隔60秒去数据库查询一次数据(只是测试,实际没这么频繁)。 

t2 = SQLexec(60) #每隔60秒执行一条sql语句 

我把代码放在manage.py里,可是发现 t1 在开始时好像被调用了2次(启动了不只一个线程吧?),我只想在服务器启动时调用一次,不知道该怎么写?? 

mange.py里面是这样写的: 

if __name__ == "__main__": 

   os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MONITOR.settings") 

   from monitor.exec import TimeDaemon,SQLexec 

   t1 = TimeDaemon(60) 

   t2 = SQLexec(60) 

   t1.setDaemon(True) 

   t2.setDaemon(True) 

   t1.start() 

   time.sleep(2) 

   t2.start() 

   from django.core.management import execute_from_command_line 

   execute_from_command_line(sys.argv) 

 

控制台输出是这样的: 

D:\MONITOR>python manage.py runserver 0.0.0.0:8000 

time Thu Jan 17 16:15:44 2013 {} 

sqlexec Thu Jan 17 16:15:46 2013 {} 

time Thu Jan 17 16:15:47 2013 {} 

sqlexec Thu Jan 17 16:15:49 2013 {} 

Validating models... 

 

errors found 

Django version 1.4.3, using settings 'DCMONITOR.settings' 

Development server is running at http://0.0.0.0:8000/

Quit the server with CTRL-BREAK. 

time Thu Jan 17 16:16:44 2013 {} 

sqlexec Thu Jan 17 16:16:46 2013 {} 

time Thu Jan 17 16:16:47 2013 {} 

sqlexec Thu Jan 17 16:16:49 2013 {} 

time Thu Jan 17 16:17:44 2013 {} 

sqlexec Thu Jan 17 16:17:46 2013 {} 

time Thu Jan 17 16:17:47 2013 {} 

sqlexec Thu Jan 17 16:17:49 2013 {} 

 

 

初学django,望指教... 


=============================================

下方有一个前辈给了一个解决方案:



class Task:
    Running=False
    @staticmethod
    def Run():
        if Task.Running:return 
        t1 = TimeDaemon(60)
        t2 = SQLexec(60)
        t1.setDaemon(True)
        t2.setDaemon(True)
        t1.start()
        time.sleep(2)
        t2.start()
        Task.Running=True
 
Task.Run()



=======================================

我的笔记:

这里把守护线程的类中run method定义为static,则与实例无关,不需要创建Task实例就可以调用。

但是守护线程运行多次,是因为类实例创建的缘故吗?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值