为了账号安全,请及时绑定邮箱和手机立即绑定

在python中每N次运行一个方法

在python中每N次运行一个方法

ibeautiful 2022-06-28 10:39:32
我试图每 5 秒打印一个句子,我需要向它传递一个参数。我在用threadingimport threadingdef printit(whatever):  threading.Timer(5.0, printit).start()  print(whatever)var= "start"printit(var)这给了我这个错误C:\Users\Wei Xi\Desktop>python test.pystartException in thread Thread-1:Traceback (most recent call last):  File "C:\Users\Wei Xi\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in _bootstrap_inner    self.run()  File "C:\Users\Wei Xi\AppData\Local\Programs\Python\Python38\lib\threading.py", line 1254, in run    self.function(*self.args, **self.kwargs)TypeError: printit() missing 1 required positional argument: 'whatever'```
查看完整描述

4 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

threading.Timer构造函数接受各个目标函数 ( ) 的args关键字参数:kwargsclass threading.Timer(interval, function, args=None, kwargs=None)


import threading


def printit(whatever):

  threading.Timer(5.0, printit, args=(whatever,)).start()

  print(whatever)


var= "start"

printit(var)

示例输出将是(在“无限”打印中):


start

start

start

start

...


查看完整回答
反对 回复 2022-06-28
?
千巷猫影

TA贡献1829条经验 获得超7个赞

这是可能的解决方案之一:


import threading


def printit(whatever): 

    print(whatever)

    threading.Timer(5.0, printit, {whatever}).start() 


var = "start" 

printit(var)

您收到错误是因为您在whatever递归调用printit函数时没有传入(函数参数)。


编辑:


但是,此解决方案将产生无限数量的线程。如果您想将该进程作为后台任务运行,您可以这样做只使用一个线程。


注意:我在这个例子中使用了 2 个参数。


import time

import threading



def printit(whatever, whatever2, seconds=5):

    while True:

        print(whatever)

        print(whatever2)

        time.sleep(seconds)


var = "start"

var2 = "end"


threading.Thread(target=printit, kwargs={"whatever":var, "whatever2":var2, "seconds":5}).start() 


print("Do something else")

输出:


start

end

Do something else

start

end

start

end

... (repeat start end every 5 seconds)


查看完整回答
反对 回复 2022-06-28
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

你可以使用时间:


def printit(str_):

   time.sleep(5)

   print(str_)


var = "start"

while True:

     printit(var)


查看完整回答
反对 回复 2022-06-28
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

您可以time.sleep()在 while 循环中使用该函数:


import time


def printit(whatever, seconds=5):

    while True:

        print(whatever)

        time.sleep(seconds)


var= "start"

printit(var) # prints "start" every 5 seconds

#start


#start


#start


查看完整回答
反对 回复 2022-06-28
  • 4 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信