首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

Python 多线程 多线程

  •  
  •   zcsnbb · 2018-10-13 12:13:27 +08:00 · 2817 次点击
    这是一个创建于 418 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    19 回复  |  直到 2018-10-13 22:21:19 +08:00
        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   2018-10-13 12:25:32 +08:00
    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
    ? 死循环等介绍
        18
    pythonee   2018-10-13 21:42:01 +08:00
    @chanin 为什么说尴尬?
        19
    ffffish   2018-10-13 22:21:19 +08:00
    为了避免著名的 X-Y 问题,我想问一下这个 use case 是什么呢?为什么需要 wait 呢?
    如果轻量级可以用 cronjob,大型项目可以考虑 apache airflow
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1165 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 18:06 · PVG 02:06 · LAX 10:06 · JFK 13:06
    ♥ Do have faith in what you're doing.