功能无延迟

2024-04-27 00:01:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但在查看日志时,我发现posit函数并没有延迟,它几乎是立即执行所有对posit的计时器调用。你知道吗

因此,如何真正随机地延迟每个函数调用而不使用定时器。睡眠因为它冻结了应用程序。你知道吗

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

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

代码示例:

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()

Tags: 函数infodatacoderandomloggerpostint
1条回答
网友
1楼 · 发布于 2024-04-27 00:01:38

根据^{}'s definition

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

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

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

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

也可以使用元组作为参数,如下所示

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

相关问题 更多 >