python while 无限循环里面加上 time.sleep(0.001),出问题了

kakala 发布于 2012/04/17 14:29
阅读 15K+
收藏 0

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

while 1:

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

    time.sleep(0.001)

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

以下是问题补充:

@kakala:后来,改成c版本的usleep调用,代码如下 while 1: go() c.usleep(1); #1微妙 结果还是一样。 (2012/04/17 16:17)
@kakala:在python的while循环里,只要加上sleep,不管时间是多少,最高的执行次数不会超过1000次每秒 (2012/04/17 22:07)
加载中
0
Yisen
Yisen
sleep0.001不是1秒1000次吗
0
ClownFish
ClownFish

哈哈!楼主悲剧了。time.sleep(0.001)

0.001*1000 = 1秒

0
任民
任民
你是不是想运行个1秒后停下,看看go()了多少次?
kakala
kakala
不是的,是想看看python在调用c扩展的时候,每秒能跑几个循环。
0
deleted
deleted

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

0
中山野鬼
中山野鬼

引用来自“false”的答案

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

问我做什么。这语言我又不会。哈哈。
deleted
deleted
楼主这问题和python关系不大,@ 你一下主要是不确定usleep的副作用.........
0
leo108
leo108

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

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

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

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

引用来自“kakala”的答案

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

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

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

kakala
kakala
我故意把那个gil锁关闭了,还是一样
返回顶部
顶部