Heim  >  Fragen und Antworten  >  Hauptteil

python3.x – Wie implementiert man Python, um alle 10 Sekunden eine bestimmte Funktion auszuführen? Der Warteprozess kann den Hauptthread nicht unterbrechen!

Wie bereits erwähnt, gebt mir bitte einen Rat!

扔个三星炸死你扔个三星炸死你2707 Tage vor1873

Antworte allen(7)Ich werde antworten

  • 高洛峰

    高洛峰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()

    Antwort
    0
  • 某草草

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

    threading.Timer

    import threading as thd
    import time
    
    def fn():
        print(time.time())
        thd.Timer(10,fn).start()
        
    fn()

    Antwort
    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

    Antwort
    0
  • ringa_lee

    ringa_lee2017-06-12 09:24:32

    可以考虑Advanced Python Scheduler(http://apscheduler.readthedoc...
    能够进行极其复杂的定时设计,每个几秒几分钟,或者是某天的具体一刻等等,可以阻塞进程,可以在后台,全部按照你的要求。

    Antwort
    0
  • ringa_lee

    ringa_lee2017-06-12 09:24:32

    # -*- coding: utf-8 -*-
    import gevent
    import time
    
    
    class Timer(object):
        """定时器,定时执行指定的函数
        """
    
        def __init__(self, start, interval):
            """
            @start, int, 延迟执行的秒数
            @interval, int, 每次执行的间隔秒数
            """
            self.start = start
            self.interval = interval
    
        def run(self, func, *args, **kwargs):
            """运行定时器
            :param func: callable, 要执行的函数
            """
            time.sleep(self.start)
            while True:
                func(*args, **kwargs)
                time.sleep(self.interval)
    
    
    def send_message():
        pass
    
    
    if __name__ == "__main__":
        scheduler = Timer(5, 10 * 60)
        gevent.spawn(scheduler.run(send_message))

    Antwort
    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()

    Antwort
    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)

    执行结果:

    Antwort
    0
  • StornierenAntwort