我需要编写一个运行两个线程的简单应用程序: - 线程 1:定时运行,假设每 1 分钟运行一次 - 线程 2:只是一个“正常”的 while True 循环,它做“东西”
如果不是按时间间隔运行的要求,我根本不会看扭曲,但简单的 sleep(60) 还不够好,结构如下:
l = task.LoopingCall(timed_thread)
l.start(60.0)
reactor.run()
看起来很简单,可以在那里实现我想要的。
现在,我如何“正确”添加另一个线程?
我在这里看到两个选项:
- 使用线程库并运行两个“python 线程”,一个执行我的 while 循环,另一个运行 reactor.run()。但谷歌似乎反对这种方法并建议使用扭曲线程
- 使用捻线。这就是我尝试过的,但不知何故,这对我来说有点笨拙。
这是我想出的:
def timed_thread():
print 'i will be called every 1 minute'
return
def normal_thread():
print 'this is a normal thread'
time.sleep(30)
return
l = task.LoopingCall(timed_thread)
l.start(60.0)
reactor.callInThread(normal_thread)
reactor.run()
这似乎有效,但是!我无法停止应用程序。如果我按下 ^C,它不会做任何事情(没有'callInThread',它会像你期望的那样停止)。^Z 轰炸到 shell,如果我然后执行 'kill %1' 它似乎会杀死进程(shell 报告),但 'normal' 线程继续运行。kill PID 不会摆脱它,唯一的治疗方法是 kill -9。真的很奇怪。
所以。我究竟做错了什么?在扭曲中实现两个线程是正确的方法吗?我不应该为扭曲而烦恼吗?还有哪些其他“标准”替代方案可以实现定时呼叫?('标准'我的意思是我可以 easy_install 或 yum 安装它们,我不想开始从随机网页下载和使用一些随机脚本)。