python3.x - python每隔10秒运行一个指定函数怎么实现呢?等待过程不能中断主线程!
问题描述
如题,求教!
问题解答
回答1:可以通过另开一条线程, 去专门做这件事情, py2代码如下, 如果是py3请自行调整下语法
# coding: utf8import threadingimport 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()回答2:
threading.Timer
import threading as thdimport timedef fn(): print(time.time()) thd.Timer(10,fn).start() fn()回答3:
如果直接开子进程的话,退出主进程时子进程会一直存在, 建议设置成守护进程
import sysimport signalimport threadingimport timefrom datetime import datetimedef 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回答4:
可以考虑Advanced Python Scheduler(http://apscheduler.readthedoc...能够进行极其复杂的定时设计,每个几秒几分钟,或者是某天的具体一刻等等,可以阻塞进程,可以在后台,全部按照你的要求。
回答5:# -*- coding: utf-8 -*-import geventimport timeclass Timer(object): '''定时器,定时执行指定的函数 ''' def __init__(self, start, interval):'''@start, int, 延迟执行的秒数@interval, int, 每次执行的间隔秒数'''self.start = startself.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(): passif __name__ == '__main__': scheduler = Timer(5, 10 * 60) gevent.spawn(scheduler.run(send_message))回答6:Python任务调度模块 – APScheduler(点击查看)
APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务、并以daemon方式运行应用。
下面是一个简单的例子,每隔10秒打印一次hello world
from apscheduler.schedulers.blocking import BlockingSchedulerdef my_job(): print ’hello world’ sched = BlockingScheduler()sched.add_job(my_job, ’interval’, seconds=10)sched.start()回答7:
#-*- coding:utf8 -*- import multiprocessingimport timedef 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)
执行结果:
相关文章:
1. android - RxJava 中有根据条件执行不同函数的操作符吗?2. javascript - html5的data属性怎么指定一个function函数呢?3. html5 - 为什么使使用vue cli 脚手架,post-css 没有自动对css3属性自动添加浏览器前缀呢?4. angular.js - 输入邮箱地址之后, 如何使其自动在末尾添加分号?5. 管理员信息修改时的密码问题6. python - Scrapy存在内存泄漏的问题。7. java如何生成token?8. javascript - 后台管理系统左侧折叠导航栏数据较多,怎么样直接通过搜索去定位到具体某一个菜单项位置,并展开当前菜单9. javascript - 如何使用nodejs 将.html 文件转化成canvas10. mysql - 电商如何存储营业额数据
