我想以每秒可变数量的调用率执行方法调用。 n
等于我要在一秒钟内执行的呼叫数量。 (而不是睡觉几秒钟,我需要在几毫秒内睡觉。)
我是这样做的:
While True:
method()
time.sleep(1/n)
现在,我想知道您是否知道一种更优雅,更有效的方法,或者这已经很好了吗?
答案 0 :(得分:0)
我认为这将是最有效的方法,因为您可以分配多个任务并创建新线程而不会占用过多内存
import threading
n=3
def do_task():
threading.Timer(1/n, do_task).start()
print ("done")
do_task()
答案 1 :(得分:0)
如果您的方法只是一个单独的后台任务,则与逻辑的其他部分没有太多交互,例如该任务只是尝试从网络中获取一些东西。然后,您可以使用celery,但是如果程序中的某个函数不太容易分离,请绕开我的答案。
一个示例,在一秒钟内执行10次求和函数。
tasks.py
from celery import Celery
app = Celery('tasks',
broker='redis://localhost',
backend='redis://localhost')
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls add(1, 2) every 1/n seconds, here, n=10
sender.add_periodic_task(0.1, add.s(1, 2), name='add every 1/n seconds')
@app.task
def add(x, y):
print("running...", x, y)
return x + y
如何使用?
首先安装redis和celery。
tasks.py
文件夹中的。
在终端1中执行:celery -A tasks worker --loglevel=info
在终端2中,执行:celery -A tasks beat --loglevel=info
然后,add
函数将每隔0.1秒运行一次。