def a(): print('11') print('22') time.sleep(3) def b(): print('aa') time.sleep(70) if __name__ == "__main__": while 1: a() b()
如何在b延时70秒的时候,a能正常输出
现在的情况 是b等待70秒的时候,整个程序是停止70秒。
想在b等待70秒时,不影响a。
想不到办法了。。
谢谢
进程 和线程,不行,会出错,已经试过了
有别的方法吗
两种方法。
1.多线程
2.等待。不要直接用sleep,而是用变量记录一段循环两个端点的时间,利用中间的时间差来控制等待时间,这个方法在游戏中运用得比较多一点(deltatime)
第一个不行。
第二个不明白
@还没有: 第一个可以的,只是用法不对。
以下是第二个思路最简单的例子
import time def a(): print('11') print('22') def b(): print('aa') if __name__ == "__main__": a_wait = 3 b_wait = 70 while True: time.sleep(1) a_wait -= 1 b_wait -= 1 if a_wait == 0: a() a_wait = 3 if b_wait == 0: b() b_wait = 70
由于你给的程序很简单且对时间的计算都是以秒为单位,只需要每次等待一秒,当达到三秒或者七十秒的时候执行相应的函数就好了,所以我直接使用的1秒作为deltatime。如果涉及到更精确的时间,则还是需要用time.time()来计算循环初始时间,然后在循环结尾计算中间的时间差来获得更精准的deltatime。
毕竟循环中其他的代码会造成误差,这样就不能直接等待一秒了
python应该有多线程和future的东西吧。
进程线程协程派生
进程 和线程,不行,会出错,已经试过了
协程也不行,
因为有sleep,执行到这,总要等b的70秒后,才继续,
@还没有: 那只能说你写错了,不是这些方法的问题
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # __author__ = '北方姆Q' 4 5 from threading import Thread 6 import time 7 8 9 def a(): 10 print('a start') 11 time.sleep(3) 12 print('a is ok') 13 14 15 def b(): 16 print('b start') 17 time.sleep(10) 18 print('b is ok') 19 20 21 t1 = Thread(target=a) 22 t2 = Thread(target=b) 23 t1.start() 24 t2.start() 25 t1.join() 26 t2.join() 27 28 29 from gevent import monkey; monkey.patch_all() 30 import gevent 31 import time 32 33 34 def a(): 35 print('a start') 36 time.sleep(3) 37 print('a is ok') 38 39 40 def b(): 41 print('b start') 42 time.sleep(10) 43 print('b is ok') 44 45 gevent.joinall([ 46 gevent.spawn(a), 47 gevent.spawn(b), 48 ])
@北方姆Q: 不能使用线程
@还没有: 下面那个是协程
import threading
进程 和线程,不行,会出错,已经试过了