搜尋

首頁  >  問答  >  主體

python3.x - python每隔10秒運行一個指定函數怎麼實現?等待過程不能中斷主線程!

如題,求教!

扔个三星炸死你扔个三星炸死你2732 天前1889

全部回覆(7)我來回復

  • 高洛峰

    高洛峰2017-06-12 09:24:32

    可以透過另開一條執行緒, 去專門做這件事情, py2程式碼如下, 如果是py3請自行調整下語法

    # coding: utf8
    import threading
    import time
    
    # 真正要执行的函数
    def t1():
        print ('ok')
    
    # 每隔10秒钟执行
    def t2():
        while 1:
            t1()
            time.sleep(10)
    
    if __name__ == '__main__':
        t = threading.Thread(target=t2)
        t.start()
    
        # 此处写你主线程要处理的事情.....
    
        t.join()

    回覆
    0
  • 某草草

    某草草2017-06-12 09:24:32

    線程。定時器

    雷雷

    回覆
    0
  • 迷茫

    迷茫2017-06-12 09:24:32

    如果直接開子程序的話,退出主程序時子程序會一直存在, 建議設定成守護程序

    import sys
    import signal
    import threading
    import time
    from datetime import datetime
    
    def quit(signum, frame):
        sys.exit()
    
    def process_fun():
        while True:
            print datetime.now()
            time.sleep(1)
    
    if __name__ == '__main__':
        try:
            signal.signal(signal.SIGINT, quit)
            signal.signal(signal.SIGTERM, quit)
    
            p = threading.Thread(target=process_fun)
            #注册成为主进程
            p.setDaemon(True)
            p.start()
    
            #如果没有主进程, 就用循环代理
            while True:
                pass
    
        except Exception as e:
            pass

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-12 09:24:32

    可以考慮Advanced Python Scheduler(http://apscheduler.readthedoc...
    能夠進行極其複雜的定時設計,每個幾秒幾分鐘,或者是某天的具體一刻等等,可以阻塞進程,可以在後台,全部按照你的要求。

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-12 09:24:32

    雷雷

    回覆
    0
  • typecho

    typecho2017-06-12 09:24:32

    Python任務調度模組 – APScheduler(點擊查看)

    APScheduler是一個Python定時任務框架,使用起來十分方便。提供了基於日期、固定時間間隔以及crontab類型的任務,並且可以持久化任務並以daemon方式運行應用程式。

    下面是一個簡單的例子,每隔10秒列印一次hello world

    from apscheduler.schedulers.blocking import BlockingScheduler
    def my_job():
        print 'hello world'
     
    sched = BlockingScheduler()
    sched.add_job(my_job, 'interval', seconds=10)
    sched.start()

    回覆
    0
  • 天蓬老师

    天蓬老师2017-06-12 09:24:32

    #-*- coding:utf8 -*- 
    
    import multiprocessing
    import time
    
    def f():
        print time.ctime(),'这是子进程,每10S执行一次'
    
    def work():
       while 1:
           f()
           time.sleep(10)
    
    if __name__ == '__main__':
        p = multiprocessing.Process(target=work,)
        p.start()
        p.deamon = True
        while 1:
            print '这是主进程,每1秒执行一次'
            time.sleep(1)

    執行結果:

    回覆
    0
  • 取消回覆