Python 多线程 多线程

2018-10-13 12:13:27 +08:00
 zcsnbb

我遇到一个问题 就是 我想写一个死循环

while True:
    write(timeframe="1m")
    write(timeframe="5m")
    write(timeframe="1h")
    write(timeframe="1d")

如何能够实现
第一个 write 方法执行后休眠 60s 第二个 write 方法执行后休眠 5min 第三个 write 方法执行后休眠 1h 第四个 write 方法执行后休眠 1d

3768 次点击
所在节点    Python
19 条回复
swordspoet
2018-10-13 12:17:31 +08:00
这个很简单啊,用 time.sleep() 就可以。
u14e
2018-10-13 12:17:43 +08:00
time.sleep() ?
Trim21
2018-10-13 12:18:07 +08:00
我觉得你需要 crontab …
zcsnbb
2018-10-13 12:25:32 +08:00
time.sleep()的话 比如最后一个 睡一小时 那么第一个需要等待一小时才能执行,而我想让他每分钟执行
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()
```
likuku
2018-10-13 12:33:35 +08:00
@zcsnbb time.sleep() ,crontab 里每分钟叫这个 .py 起来一次,每次即一个新 py 进程。

当然,为了防止内存耗尽,你的 .py 或许要增加首先检测系统里有几个同名 .py 进程在跑,
假若超过你的限制,那么就直接 sys.exit()
itskingname
2018-10-13 12:39:43 +08:00
@likuku 补充 6 楼,如何使用 Shell 命令判断一个进程是否存在: https://mp.weixin.qq.com/s/b9RxTGGrUpUG1NgZoqE1uA
picture2200
2018-10-13 12:44:36 +08:00
要定时任务吧,用 apscheduler 吧。照你这样写很麻烦啊。
chrisyunhua
2018-10-13 12:55:47 +08:00
每秒钟取 timestamp 再去 mod timeframe 判断一下不行吗
May725
2018-10-13 13:01:25 +08:00
我觉得你应该用 Timer 定时任务来做,而不是简单的 sleep,因为长时间的 sleep 误差挺大的,有可能一直挂起不恢复了。
WizardMeow
2018-10-13 13:03:02 +08:00
asyncio 了解一下,轻量级解决方案
WizardMeow
2018-10-13 13:03:49 +08:00
另外 sleep 最好不要超过 h
beny2mor
2018-10-13 17:36:33 +08:00
Timer?
elioti
2018-10-13 18:45:10 +08:00
定时任务? schedule 模块
yzding
2018-10-13 18:47:49 +08:00
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)
chanin
2018-10-13 18:56:04 +08:00
python 多线程有点尴尬,golang 了解一下!
myliyifei
2018-10-13 19:12:03 +08:00
我倒是想知道 多线程或者多进程 最后一句是不是总是 while true + time.sleep
? 死循环等介绍
pythonee
2018-10-13 21:42:01 +08:00
@chanin 为什么说尴尬?
ffffish
2018-10-13 22:21:19 +08:00
为了避免著名的 X-Y 问题,我想问一下这个 use case 是什么呢?为什么需要 wait 呢?
如果轻量级可以用 cronjob,大型项目可以考虑 apache airflow

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/497286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX