thepoy 发表于 2020-10-28 22:28

【python】我想在while里写一个定时器,有input时停止定时,input结束继续定时

本帖最后由 thepoy 于 2020-10-28 22:44 编辑

比如下面这个函数:
```python
# 每隔2秒执行一次
def count(n):
    n+=1


def main():
    while True:
      input('回车改 flag:\n')
   
      print('这里进行了一些操作')
      time.sleep(random.randint(1, 10))
      print('操作完成')
```

我想在没有回车时,能有个定时器能每隔两秒执行一次`count()`函数,但一旦有回车事件,则这个定时器暂停,执行`main()`里的函数,main()函数执行完后,继续运行定时器2秒执行一次`count()`函数。

绞尽脑汁也没想到如何实现,请高手们支个招,谢谢!

### 10-28 22:43 更新
写出了代码,但觉得还不是很完美,所以还是希望高手支招,谢谢!
```python
import random
import time
from threading import Timer, Thread, Lock, activeCount

mutex = Lock()
flag = True


def refresh(n: int):
    global flag
    if flag:
      n += 1
      print(n)

      t = Timer(1, refresh, (n,))
      t.start()


def main():
    global flag

    n = 0

    while True:
      t = Thread(target=refresh, args=(n,))
      t.start()
      input('回车改 flag:\n')
      mutex.acquire()
      flag = False
      mutex.release()
      print('这里进行了一些操作')
      time.sleep(random.randint(1, 10))
      print('操作完成')
      print('当前线程数为{}'.format(activeCount()))
      mutex.acquire()
      flag = True
      mutex.release()
```

klamauk 发表于 2020-10-28 22:40

这用多线程实现吧。

thepoy 发表于 2020-10-28 22:43

klamauk 发表于 2020-10-28 22:40
这用多线程实现吧。

是的,只能多线程

rsnodame 发表于 2020-10-29 14:04

{:301_998:} 多线程,学习了
页: [1]
查看完整版本: 【python】我想在while里写一个定时器,有input时停止定时,input结束继续定时