若其中存在中文,必须在文件开头加上:#coding=UTF-8
全局变量的使用技巧在函数外部声明一个变量,在函数内部修改该全局变量之前先用global声明,修改才能生效。代码如下:
#coding=UTF-8
post_list = []
def test():
print "--------任务开始--------"
from app.models import Tasks
import time
now = int(time.time())
global post_list
post_list = Tasks.objects.filter(expire_time__lt=now)
post_list = list(post_list)
item_list(post_list)
print Tasks.objects.filter(expire_time__lt=now).query
def item_list(post_list):
print "--------请求队列--------"
if len(post_list):
print post_list
item = post_list[0]
del_post(item)
def del_post(item):
print "--------请求参数--------"
import requests
crc32 = item.crc32+""
url = item.url+""
url = url.replace("http://", "")
url = url.replace("https://", "")
url = url.replace("/", "")
post_data = {"crc32": crc32, "url": url}
print post_data
resp = requests.post("http://api.shawdo.com/api/admin/public/oneDataOutput", data=post_data)
print "--------请求结果--------"
print resp.text
if resp.status_code == 200:
global post_list
del post_list[0]
item_list(post_list)
if len(post_list) == 0:
print "--------任务完成--------"
如果不声明post_list ,那么所有函数中引用post_list 都是[]
,这样我们就不能使用不算变化的post_list去做队列了。
settings.py中写入的内容:
INSTALLED_APPS = [
。。。。。。
'django_crontab',
]
//python_site为文件目录,cron为文件名称,test为函数名称
CRONJOBS = [
('*/1 * * * *', 'python_site.cron.test', '>>/home/test.log')
]
settings.py配置完了之后需要python manage.py crontab add
将任务添加到crontab中。然后运行django即可,运行django:python manage.py runserver
。remove可以删除,其实add也可以覆盖掉之前的,add之后要重启crontab服务:/etc/init.d/cron restart
。查看crontab状态的话:ps aux | grep cron
不过还是推荐使用linux自带的crontab,这里需要注意的是使用shell脚本去调用你的py文件
shell中应该这样写:
python /home/test.py
然后crontab再去定时执行shell脚本
crontab使用
编辑crontab任务
crontab -e
添加一条计划任务,使用shell脚本去控制需要执行的代码
*/1 * * * * sh /home/test.sh
shell中
python /home/test.py