首页  >  问答  >  正文

python3.x - python每隔10秒运行一个指定函数怎么实现呢?等待过程不能中断主线程!

如题,求教!

扔个三星炸死你扔个三星炸死你2656 天前1842

全部回复(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

    threading.Timer

    雷雷

    回复
    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
  • 取消回复