我遇到一个问题 就是 我想写一个死循环
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 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 |