Python线程 - 如何在单独的线程中重复执行函数?

时间:2018-01-01 13:01:20

标签: python multithreading timer setinterval

我有这段代码:

import logging
print(logging.__file__)

我想要“你好,世界!”每秒打印一次,但是当我运行代码没有任何反应时,这个过程就会保持活跃。

我已经阅读了这些代码确切适用于人们的帖子。

我很困惑在python中设置适当的间隔是多么困难,因为我已经习惯了JavaScript。我觉得我错过了什么。

非常感谢帮助。

5 个答案:

答案 0 :(得分:2)

我没有看到您当前的方法存在任何问题。它在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()

打印:

Hello, World!
Hello, World!

但我建议启动该主题为:

thread = threading.Timer(1.0, printit)
thread.start()

这样你就可以使用:

来停止线程
thread.cancel()

如果没有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..")

然后使用Event类的对象启动线程:

my_event = Event()
thread = MyThread(my_event)
thread.start()

您将开始在屏幕上看到以下输出:

Thread is running..
Thread is running..
Thread is running..
Thread is running..

要停止该线程,请执行:

my_event.set()

这为修改未来的变化提供了更大的灵活性。

答案 1 :(得分:1)

我在python 3.6中运行它。它按预期工作正常。

答案 2 :(得分:1)

试试这个:

import time

def display():
    for i in range(1,5):
        time.sleep(1)
        print("hello world")

答案 3 :(得分:0)

我使用过Python 3.6.0 我使用了_thread和time package。

import time
import _thread as t
def a(nothing=0):
    print('hi',nothing)
    time.sleep(1)
    t.start_new_thread(a,(nothing+1,))
t.start_new_thread(a,(1,))#first argument function name and second argument is tuple as a parameterlist.

o / p就像是 嗨1 你好2 你好3 ....

答案 4 :(得分:0)

可能的问题是,每次运行printit时都要创建一个新线程。

一种更好的方法可能是创建一个线程,该线程可以执行您想要执行的任何操作,然后出于某种原因发送并发送事件以使其终止:

import pandas as pd

df = pd.read_csv('./sample.csv')
df['Date'] = pd.to_datetime(df['Date'])
print df[(df['Date'].dt.hour == 23) & (df['Date'].dt.minute < 50)]