python版 定时任务机制
定时任务的原理
服务器执行一个python脚本
这个脚本,循环执行配置的定时任务地址
Python请求地址, 该地址应该返回, 下次再来执行的秒数. 也就是任务的频率
比如任务希望每3秒执行一次, 那么任务结束后,应该返回一个3的数字
python脚本拿到任务返回的数字, 算出下次执行任务的时间. 当时间条件满足是, python脚本会继续访问该任务
不同的任务, 直接修改 init里面的配置就可以了
python脚本如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import threading
import time
import urllib.request
import os,stat
class MyThread(object):
'''
多线程
'''
def __init__(self, func_list=None,timeout=5):
self.threads = []
self.rs = {}
self.timeout = timeout
self.func_list = func_list
self.start()
#封装的线程函数
def trace_func(self, func, name , *args, **kwargs):
ret = func(*args, **kwargs)
self.rs[name] = ret
#执行多线程
def start(self):
for v in self.func_list:
if v["args"]:
lists = []
lists.append(v["func"])
lists.append(v["name"])
for arg in v["args"]:
lists.append(arg)
tuples = tuple(lists)
t = threading.Thread(target=self.trace_func, args=tuples)
else:
t = threading.Thread(target=self.trace_func, args=(v["func"],v["name"],))
self.threads.append(t)
for t in self.threads:
t.start()
for t in self.threads:
t.join()
#t.join(self.timeout)
'''
执行任务
'''
def task(url, last_time):
#当前时间, 最后执行时间
cur_time = int(time.time())
last_time = int(last_time)
if last_time==0:
last_time = cur_time
#满足条件就执行任务
if cur_time>=last_time:
print("请求:%s"%(url))
try:
req = urllib.request.urlopen(url)
content = req.read()
content = str(content, 'utf-8')
content = content.strip()
if content.isdigit():
last_time += int(content)
else:
last_time += 1000
except:
print('发生了异常, 重置文件')
init()
return last_time
'''
多线程调用定时任务
'''
def main():
#读取文件
with open("config.txt",'r') as f:
lines = f.readlines()
f.close()
#多线程执行
func_list = []
for v in lines:
v = v.split('|')
v[1] = int(v[1])
func_list.append({"func":task,"args":(v[0], v[1]), "name":v[0]})
mt = MyThread(func_list)
d = mt.rs
#重新写入文件
content = ''
for k in d:
content += "%s|%s\n" % (k,str(d[k]))
with open("config.txt",'w') as f:
f.write(content)
f.close()
'''
初始化要执行的定时任务
'''
def init():
urls = [
'http://admin.yqxv1.local/task/withdraw',
'http://baidu.com'
]
content = ''
for v in urls:
content += "%s|%s\n" % (v,0)
with open("config.txt",'w+') as f:
f.write(content)
f.close()
os.chmod("config.txt",stat.S_IRWXU)
init()
while True:
main()
把上面代码保存为doit.py
如何把脚本跑起来, 命令流程
安装python3
ps -ef | grep python3
查看是否有进程, 如果有该进程, 可以先把进程杀了
kill -9 进程号
移除 config.txt
rm -rf config.txt
编辑你的doit.py的链接配置
sudo vim doit.py
再将定时脚本跑起来
nohup python3 doit.py >/dev/null 2>&1 &
ps -ef | grep python3 查看你的任务跑起来没有
测试反馈
在你的执行的脚本, 打印日志log_test()
python版 定时任务机制的更多相关文章
- python的反射机制
转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...
- 简单谈谈python的反射机制
转:http://www.jb51.net/article/87479.htm 本文主要介绍python中的反射,以及该机制的简单应用,熟悉JAVA的程序员,一定经常和Class.forName打交道 ...
- Python垃圾回收机制--完美讲解!
转自: http://www.jianshu.com/p/1e375fb40506 先来个概述,第二部分的画述才是厉害的. Garbage collection(GC) 现在的高级语言如java,c# ...
- 【转】简单谈谈python的反射机制
[转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- python垃圾回收机制(Garbage collection)
由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...
- 《大话设计模式》Python版代码实现
上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的 ...
- 深入探讨 Python 的 import 机制:实现远程导入模块
深入探讨 Python 的 import 机制:实现远程导入模块 所谓的模块导入( import ),是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 在 Python 中使用 ...
- 【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
随机推荐
- Apereo CAS Server服务端搭建教程
不说废话了,直接看搭建过程吧. 首先到下载源码,https://github.com/apereo/cas-overlay-template/tree/4.2 附上地址,本次版本为4.2,下载源码后如 ...
- scrapy将爬取到的数据存入elasticsearch
pip安装 elasticsearch-dsl的包, 是elasticsearch提供给python 的接口 if __name__ == "__main__": 这个用来调试,还 ...
- common.py OpenCv例程阅读
#!/usr/bin/env python ''' This module contais some common routines used by other samples. ''' import ...
- iOS 加载Viewcontroller的几种方法
// 一.根据StoryboardID(需要在Storyboard设置),通过ViewController所在的Storyboard来加载: UIStoryboard *storyboard = [U ...
- 跟我一起玩Win32开发(21):复制&粘贴&剪贴板操作
我要提醒一下大家,看了我的博文学到的知识,千万不要用于实际开发,不然你会被你的上司骂:“妈的,这些东西哪来的,从来没有人这样做过.”不信你试试,脑细胞被冻结的经理或者技术总监们肯定会这样说的. 如果是 ...
- JAVA学习笔记(一)配置环境
java语言的两种机制: Java 的虚拟机机制(JVM):虚拟机机制保证Java程序的跨平台特性. Java 的垃圾回收机制:垃圾回收机制保证Java程序更安全.更高效. 环境搭配:安装JDK和JR ...
- 解题报告:poj 3259 Wormholes(入门spfa判断负环)
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- nginx缓存配置及开启gzip压缩
阅读目录 一:nginx缓存配置 二:nginx开启gzip 回到顶部 一:nginx缓存配置 在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来 ...
- apache mod_alias模块功能介绍
我觉得mod_alias根mod_rewrite挺像的,都可以实现url的重写,而mod_alias可以实现简单的url重写的功能 ,而mod_rewrite可以实现比较复杂的重写.mod_alias ...
- 《Python基础教程》 读书笔记 第六章 抽象 函数 参数
6.1创建函数 函数是可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值.一般来说,内建的callable函数可以用来判断函数是否可调用: >>> x=1 ...