gpt4 book ai didi

python - Python-如何正确终止threading.Timer类?

转载 作者:行者123 更新时间:2023-12-03 13:12:40 25 4
gpt4 key购买 nike

我目前正在尝试使用threading.Timer,但我做得不太好。
我的目标是运行数百个功能,并一直重复执行。
问题是,我的RAM的使用在不断增长,直到该过程停止为止。

这是我的代码的样子:

from threading import Timer

class Foo:
def __init__(self, number):
self.number = number
self.timer = Timer(1, self.print_number)
self.timer.start()

def print_number(self):
print "Number: %s"%self.number
self.repeat()

def repeat(self):
self.timer.cancel()
#self.timer.join()
#time.sleep(1)
self.timer = Timer(3, self.print_number)
self.timer.start()

for x in range(1, 300):
Foo(x)

因此,我读到可以在.cancel()之后使用.join()方法终止线程。
但是,当我这样做时,我得到的是 RuntimeError: (cannot join current thread)
在类似的主题上,我读到可以在.cancel()之后使用time.sleep来终止线程,
但这对我没有任何帮助。

我的问题:如何在此代码示例中正确终止线程,如何停止脚本使用越来越多的RAM,或者我做错了什么?

抱歉,如果我要问一个已经被问过很多次的问题,但是我正在搜索并尝试了几个小时,还没有找到解决方案。

提前致谢。

最佳答案

像这样吗?只是在循环中有一个休息条件。最后的联接只是确保所有线程在继续前进之前完成。我经常将其与Queue一起使用(您可以找到样本,Queue Work Task模式或一些类似的搜索)。

另外,当我只需要在计时器上运行某些东西或类似cron的功能时,可以使用apscheduler。

import threading
import time

WORKERS = 300

class Worker(threading.Thread):

def __init__(self, number):
self.number = number
threading.Thread.__init__(self)

def run(self):
while 1:
if self.number > 300:
break

print "Number: %s"%self.number
self.number += 1
time.sleep(3)

workers = []
for i in range(WORKERS):
w = Worker(100)
workers.append(w)
w.start()

for w in workers:
w.join()

关于python - Python-如何正确终止threading.Timer类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23725583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com