Jon*_*ner 3 python multithreading timer setinterval
我有这个代码:
import threading
def printit():
print ("Hello, World!")
threading.Timer(1.0, printit).start()
threading.Timer(1.0, printit).start()
Run Code Online (Sandbox Code Playgroud)
我正在尝试说“你好,世界!” 每秒打印一次,但是当我运行代码时没有任何反应,该过程只是保持活动状态。
我读过一些帖子,其中这段代码确实对人们有用。
我对在 python 中设置适当的间隔有多困难感到非常困惑,因为我习惯了 JavaScript。我觉得我失去了一些东西。
感谢帮助。
我认为您当前的方法没有任何问题。它在 Python 2.7 和 3.4.5 中都对我有用。
import threading
def printit():
print ("Hello, World!")
# threading.Timer(1.0, printit).start()
# ^ why you need this? However it works with it too
threading.Timer(1.0, printit).start()
Run Code Online (Sandbox Code Playgroud)
打印:
Hello, World!
Hello, World!
Run Code Online (Sandbox Code Playgroud)
但我建议将线程启动为:
thread = threading.Timer(1.0, printit)
thread.start()
Run Code Online (Sandbox Code Playgroud)
这样您就可以使用以下命令停止线程:
thread.cancel()
Run Code Online (Sandbox Code Playgroud)
如果没有对象进行Timer类,您将必须关闭解释器才能停止线程。
替代方法:
Thread就我个人而言,我更喜欢通过扩展类来编写计时器线程:
from threading import Thread, Event
class MyThread(Thread):
def __init__(self, event):
Thread.__init__(self)
self.stopped = event
def run(self):
while not self.stopped.wait(0.5):
print("Thread is running..")
Run Code Online (Sandbox Code Playgroud)
然后使用类对象启动线程,Event如下所示:
my_event = Event()
thread = MyThread(my_event)
thread.start()
Run Code Online (Sandbox Code Playgroud)
您将开始在屏幕上看到以下输出:
Thread is running..
Thread is running..
Thread is running..
Thread is running..
Run Code Online (Sandbox Code Playgroud)
要停止线程,请执行:
my_event.set()
Run Code Online (Sandbox Code Playgroud)
这为将来修改更改提供了更大的灵活性。
| 归档时间: |
|
| 查看次数: |
8196 次 |
| 最近记录: |