Python守护线程被多次运行的问题【摘记】
2013-03-04 19:08
246 查看
前两天学习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...
0 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,望指教...
=============================================
下方有一个前辈给了一个解决方案:
=======================================
我的笔记:
这里把守护线程的类中run method定义为static,则与实例无关,不需要创建Task实例就可以调用。
但是守护线程运行多次,是因为类实例创建的缘故吗?
我想在启动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...
0 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实例就可以调用。
但是守护线程运行多次,是因为类实例创建的缘故吗?
相关文章推荐
- 解决java Android 中同一个线程多次运行问题
- Python主线程结束为什么守护线程还在运行?
- Sublime Text 2中运行Python没有反应的问题
- Python3多线程--守护线程&非守护线程
- 守护线程的创建和运行
- windows下python-nmap运行过程中出现的问题及解决办法
- ViewDidLoad运行多次的问题
- Activity已经销毁了,线程还在运行的问题
- 解决Windows下,运行python工程下的模块找不的到问题
- python-scrapy 中运行出现DLL load faild :%1 不是32位应用程序的问题
- python 后台运行问题
- python 27 super继承(解决多重继承时,老办法init父类多次的问题)
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC2
- Python实例浅谈之五Python守护进程和脚本单例运行
- linux nohup python 后台运行无输出问题
- yum 遇到 python运行问题
- java 守护线程运行示例
- 一个线程通信问题(sub运行10次,然后main运行100次,这样交替循环50次)
- 技术性问题 – 您需要多少个PHP/Python/Ruby 应用服务器工作线程?
- 多线程,线程创建及关闭句柄存在的问题,终止线程的运行的几个函数