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版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
随机推荐
- NSA互联网公开情报收集指南:迷宫中的秘密·下
猫宁!!! 参考链接: https://www.nsa.gov/news-features/declassified-documents/assets/files/Untangling-the-Web ...
- PJzhang:微信公众号短连接与微信好友验证
猫宁!!! 参考链接:https://mp.weixin.qq.com/s/LPuYrDEyEXHyhcK3_HokSg 之前看到他们有人把微信公众号文章的长链接转为短链接,很受用,百度搜索一下方法, ...
- 第十八篇 .NET高级技术之Linq与EF Code-First Fluent API基础讲解
1.FluentApi简介 在这里提供了一个fluentapi基础的DEMO然后咱们在进一步的学习,直接上干货. 第一步在数据库创建一个表:person 第二步:新建控制台程序FluentAPI 第三 ...
- 哈夫曼费用计算C++
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #in ...
- Hexo - 修改永久链接的默认格式
Hexo的永久链接的默认格式是 :year/:month/:day/:title/,比如访问站点下某一篇文章时,其路径是 2018/04/12/xxxx/,如果我们的文章标题是中文的,那么该路径就会出 ...
- AtCoder Grand Contest 018 D - Tree and Hamilton Path
题目传送门:https://agc018.contest.atcoder.jp/tasks/agc018_d 题目大意: 给定一棵\(N\)个点的带权树,求最长哈密顿路径(不重不漏经过每个点一次,两点 ...
- UVA - 1349 D - Optimal Bus Route Design
4. D - Optimal Bus Route Design 题意:给出n(n<=100)个点的带权有向图,找出若干个有向圈,每个点恰好属于一个有向圈.要求权和尽量小. 注意即使(u,v)和( ...
- Hibernate通过实体对象对应数据库表信息
Hibernate通过实体对象对应数据库表信息,包括:数据库表名称.主键列名.非主键列名等. 获取对象映射缓存管理类: AbstractEntityPersister aep = (AbstractE ...
- iOS UILabel UITextView自适应文本,或文本大小自适应
//UILabel自适应文本的高度 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(, , , )]; label.numberOf ...
- oracle中的用户详解 【转】
oracle中的用户很多,也很令初学者费解.oracle中的帐户分为两类:一类是必需的帐户,一类是存储各种应用的帐户 用户名 密码 描述 ANONYMOUS ANONYMOUS 访问http的匿名 ...