Heim > Fragen und Antworten > Hauptteil
Wie bereits erwähnt, gebt mir bitte einen Rat!
高洛峰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()
某草草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()
迷茫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
ringa_lee2017-06-12 09:24:32
可以考虑Advanced Python Scheduler(http://apscheduler.readthedoc...
能够进行极其复杂的定时设计,每个几秒几分钟,或者是某天的具体一刻等等,可以阻塞进程,可以在后台,全部按照你的要求。
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))
typecho2017-06-12 09:24:32
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()
天蓬老师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)
执行结果: