我遇到一个问题 就是 我想写一个死循环
while True:
write(timeframe="1m")
write(timeframe="5m")
write(timeframe="1h")
write(timeframe="1d")
如何能够实现
第一个 write 方法执行后休眠 60s
第二个 write 方法执行后休眠 5min
第三个 write 方法执行后休眠 1h
第四个 write 方法执行后休眠 1d
1
swordspoet 2018-10-13 12:17:31 +08:00 via iPhone
这个很简单啊,用 time.sleep() 就可以。
|
2
u14e 2018-10-13 12:17:43 +08:00 via Android
time.sleep() ?
|
3
Trim21 2018-10-13 12:18:07 +08:00 via Android
我觉得你需要 crontab …
|
4
zcsnbb OP time.sleep()的话 比如最后一个 睡一小时 那么第一个需要等待一小时才能执行,而我想让他每分钟执行
|
5
AlisaDestiny 2018-10-13 12:32:56 +08:00
```python
#coding=utf-8 import concurrent.futures as futures # from concurrent.futures import ThreadPoolExecutor import time def write(delay): print('sleep:',delay) time.sleep(delay) return 'result' def main(): with futures.ThreadPoolExecutor(max_workers=4) as executor: download_futures = [executor.submit(write, delay) for delay in [60,5*60,60*60,24*60*60]] for future in futures.as_completed(download_futures): rs = future.result() print(rs) print('all done.') if __name__ == '__main__': main() ``` |
6
likuku 2018-10-13 12:33:35 +08:00
@zcsnbb time.sleep() ,crontab 里每分钟叫这个 .py 起来一次,每次即一个新 py 进程。
当然,为了防止内存耗尽,你的 .py 或许要增加首先检测系统里有几个同名 .py 进程在跑, 假若超过你的限制,那么就直接 sys.exit() |
7
itskingname 2018-10-13 12:39:43 +08:00
@likuku 补充 6 楼,如何使用 Shell 命令判断一个进程是否存在: https://mp.weixin.qq.com/s/b9RxTGGrUpUG1NgZoqE1uA
|
8
picture2200 2018-10-13 12:44:36 +08:00 via Android
要定时任务吧,用 apscheduler 吧。照你这样写很麻烦啊。
|
9
chrisyunhua 2018-10-13 12:55:47 +08:00
每秒钟取 timestamp 再去 mod timeframe 判断一下不行吗
|
10
May725 2018-10-13 13:01:25 +08:00
我觉得你应该用 Timer 定时任务来做,而不是简单的 sleep,因为长时间的 sleep 误差挺大的,有可能一直挂起不恢复了。
|
11
WizardMeow 2018-10-13 13:03:02 +08:00 via Android
asyncio 了解一下,轻量级解决方案
|
12
WizardMeow 2018-10-13 13:03:49 +08:00 via Android
另外 sleep 最好不要超过 h
|
13
beny2mor 2018-10-13 17:36:33 +08:00
Timer?
|
14
elioti 2018-10-13 18:45:10 +08:00
定时任务? schedule 模块
|
15
yzding 2018-10-13 18:47:49 +08:00 via Android
schedule,给人类用的定时器模块。
# 每十分钟执行一次 schedule.every(10).minutes.do(job) # 每 1 小时执行一次 schedule.every().hour.do(job) # 每天执行一次 schedule.every(). day.do(job) while True: schedule.run_pending() time.sleep(1) |
16
chanin 2018-10-13 18:56:04 +08:00
python 多线程有点尴尬,golang 了解一下!
|
17
myliyifei 2018-10-13 19:12:03 +08:00 via Android
我倒是想知道 多线程或者多进程 最后一句是不是总是 while true + time.sleep
? 死循环等介绍 |
19
ffffish 2018-10-13 22:21:19 +08:00
为了避免著名的 X-Y 问题,我想问一下这个 use case 是什么呢?为什么需要 wait 呢?
如果轻量级可以用 cronjob,大型项目可以考虑 apache airflow |