python3.x – Wie implementiert man Python, um alle 10 Sekunden eine bestimmte Funktion auszuführen? Der Warteprozess kann den Hauptthread nicht unterbrechen!
扔个三星炸死你
扔个三星炸死你 2017-06-12 09:22:32
0
7
1893

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

扔个三星炸死你
扔个三星炸死你

Antworte allen(7)
小葫芦

可以通过另开一条线程, 去专门做这件事情, 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()
某草草

threading.Timer

import threading as thd
import time

def fn():
    print(time.time())
    thd.Timer(10,fn).start()
    
fn()
迷茫

如果直接开子进程的话,退出主进程时子进程会一直存在, 建议设置成守护进程

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
左手右手慢动作

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

左手右手慢动作
# -*- 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))
typecho

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()
Peter_Zhu
#-*- 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)

执行结果:

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage