15
回答
python while 无限循环里面加上 time.sleep(0.001),出问题了
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

python程序里面有个无限循环,代码如下

while 1:

    go()  #每隔一段时间,统计这个循环每秒能执行多少次

    time.sleep(0.001)

最后发现,加上time.sleep(0.001)后,这个循环每秒不超过1000次/秒。也就是最高1000次,不能再高了,后来使用c写了一个usleep替换time.sleep,问题还是一样。为什么,那位同学知道哦

举报
kakala
发帖于6年前 15回/13K+阅

以下是问题补充:

  • @kakala :后来,改成c版本的usleep调用,代码如下 while 1: go() c.usleep(1); #1微妙 结果还是一样。 (6年前)
  • @kakala :在python的while循环里,只要加上sleep,不管时间是多少,最高的执行次数不会超过1000次每秒 (6年前)
共有15个答案 最后回答: 11个月前
你是不是想运行个1秒后停下,看看go()了多少次?
--- 共有 1 条评论 ---
kakala不是的,是想看看python在调用c扩展的时候,每秒能跑几个循环。 6年前 回复

引用来自“false”的答案

试试select或者nanosleep, 我记得usleep在一些平台上是有副作用的,具体副作用是什么,我忘了....@中山野鬼

问我做什么。这语言我又不会。哈哈。
--- 共有 1 条评论 ---
deleted楼主这问题和python关系不大,@ 你一下主要是不确定usleep的副作用......... 6年前 回复

你的代码和效果完全正常啊,看没看出什么问题

--- 共有 3 条评论 ---
kakala回复 @leo108 : 如果不适用sleep那么跑满cpu,这不是想要的,于是加上sleep。 6年前 回复
leo108回复 @kakala : 我现在是不明白你这里的sleep的目的是什么,有了这个sleep才导致每秒最多执行1000次,而你又说这个有问题,问题在哪? 6年前 回复
kakalapython的 time.sleep这样子是有问题的。 如果是调用c版本的usleep那么代码就不正常了。 6年前 回复

我要搞晕了~~~~每次sleep 0.001秒,一秒钟最多也就 睡1000次吧。用啥语言应该也这样吧。
很想知道楼主眼中的正常情况应该是什么样子!!

--- 共有 3 条评论 ---
asdfsx我的建议是先测试一下你的c扩展程序,编译成可执行文件,测试一下1秒多少次循环,然后再放到python下看看一秒多少次循环,可以把扩展模块接收到到的参数先打印出来 6年前 回复
asdfsx@kakala 就是说问题出在后半段~~~我懂了 6年前 回复
kakalapython的time.sleep(0.001)是一秒只跑1000次,可是c版本的usleep(1)是睡1微妙(1秒=1000毫秒=1000*1000微妙)。可以这个效果和python的time.sleep(0.001)一样 6年前 回复

引用来自“kakala”的答案

python的 time.sleep这样子是有问题的。 如果是调用c版本的usleep那么代码就不正常了。

试试select.select([],[],[],timeout)

python的sleep里做了很多工作,比如释放GIL, 你直接封装一下usleep可能导致你全局被锁

--- 共有 1 条评论 ---
kakala我故意把那个gil锁关闭了,还是一样 6年前 回复
顶部