PHP+python 执行长时间任务 防止PHP超时

最近在工作中遇到一个小问题,就是用php做了一个系统,需要每天去拉一边接口的数据,用于跟本系统的数据同步。但是由于接口的限制只能一条一条数据去同步,造成的结果就是很慢。

如果用php直接进行上千或者上万数据的批量查询后批量同步,必然会造成数据的卡顿,服务器承载不住,或者是接口访问的数据拥堵;于是乎我就用了一个本办法,每次同步一条数据。然后多次执行就行了。但问题就在于php的执行时间的限制,数据少了还好说,一旦数据多了,必然超时。

实在没办法就动起来歪脑筋,采用python去做长时间的任务执行,然后调用php写好的单条数据同步链接就行了。

第一步写python,php的部分我就不说了每个人的逻辑不一样的。

everyday.py 

import pymysql.cursors
import requests
import time
#上面分别调用了mysql数据库链接模块、请求模块、时间控制模块

# 链接数据库
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='123456',
                             database='dbname',
                             cursorclass=pymysql.cursors.DictCursor)
#查询数据表
with connection:
    with connection.cursor() as cursor:
        count = cursor.execute("SELECT * FROM `tp_product`")

#定义循环变量
i = 1
#开始循环
while i < count:
    #访问带分页参数的php页面
    url = "http://localhost/index.php/index/product/list"
    params = {"page": i}
    res = requests.get(url=url, params=params)
    print(i)
    i = i + 1
    #访问以后为了防止卡顿,暂停一秒再继续执行
    time.sleep(1)
else:
    url = "http://localhost/index.php/index/product/list"
    params = {"page": i}
    res = requests.get(url=url, params=params)
    print('ok')
    time.sleep(2)
    #判断一下,最后一条执行完毕的时候暂停2秒退出执行程序
    exit(0)

第二步:把程序上传到服务。找到你的程序路径。

然后采用 linux 定时脚本crontab 让这个python程序每天凌晨执行一次即可。

当然如果是用的宝塔后台就更方便了,直接在后台的计划任务里面去写好就行了

PHP+python 执行长时间任务 防止PHP超时_第1张图片

 

你可能感兴趣的:(php,thinkphp,服务器,php,python,开发语言,数据同步)