gpt4 book ai didi

python - 函数调用无延迟

转载 作者:行者123 更新时间:2023-11-28 17:36:35 25 4
gpt4 key购买 nike

对于函数的随机延迟执行,我在 for 循环中使用了以下代码,每次迭代时索引 i 递减,randomtime 是一个随机值数组:

threading.Timer(int(random.random()*20)+i, postit,[replydata]).start()

但是在检查日志时我发现 postit 函数根本没有延迟,它几乎立即执行所有计时器调用以 postit。

那么如何在不使用 timer.sleep 的情况下真正随机延迟每个函数调用,因为它会卡住应用程序。

看到日志后,可以看到任意顺序的时间戳,日志记录是在 posit 函数内完成的,BEGIN 是程序的开始:

2015-04-24 19:06:20,775 INFO 2015-04-24 19:06:20,782 INFO2015-04-24 19:06:21,749 INFO .:2015-04-24 19:06:25,845 INFO BEGIN

Code sample:

def startsession():
with session() as c:
preq=c.post('...', data=payloadlogin,headers = headers)
response=c.post('...',data=payloaddata,headers = headers)
j=json.loads(response.text)
logger.info('BEGIN'+str(c.cookies.items()))

#print j
for i in range(len(j['data'])-1,0,-1) :
part=j['data'][i]['body']
code=j['data'][i]['code']
pics=''
for t in range(len(j['data'][i]['pics'])):
pics=pics+j['data'][i]['pics'][t]['name']+' , '


rep=getreply(part,pics)
e=(code,part, pics,rep)


if rep!='':
replydata['cod']=code
replydata['rep']=rep
replydata['pos']=int(random.random()*10)
def postreply(replydata):
represponse=c.post('...',data=replydata,headers = headers)
logger.info(str(e) +" "+str(represponse))


threading.Timer(int(random.random()*20), postreply,[replydata]).start()
print i+replydata['pos']
else:
logger.info(str(e))

if __name__ == '__main__':
startsession()

最佳答案

根据 Timer's definition

threading.Timer(interval, function, args=[], kwargs={})

您需要将函数对象作为第二个参数传递,以及要传递给函数的参数列表。所以,你需要这样写

threading.Timer(int(random.random()*10)+i, postit, [data]).start()

现在,postit 是要调用的函数,[data] 是调用时要传递给 postit 函数的参数。

你也可以像这样使用一个元组作为参数

threading.Timer(int(random.random()*10)+i, postit, (data,)).start()

关于python - 函数调用无延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840332/

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