我看过每一篇相关的文章或答案,但都无法解决这个问题,我有一个python脚本,它按顺序调用一组api并将数据写入一个文件。有些api需要30-40分钟才能返回响应,有些返回结果需要毫秒。你知道吗
当我在本地的mac机器上运行这个python脚本时,它运行得很平稳,并且符合预期。 当我在远程Linux服务器上运行同一个脚本时,python脚本启动对api的调用,它启动第一个api,成功完成,然后启动第二个api,但之后再也没有完成,只是永远挂起。你知道吗
这些api完全可以从linux服务器访问,因此不存在访问问题。你知道吗
我改变了api调用的顺序,以检查某个api是否有问题,但所有api都正常工作。只是如果python脚本执行太长时间,它就会挂起。你知道吗
这是我的python文件测试.py你知道吗
import requests
import json, collections
import time
sourceDataApiBaseUrl = "https://apiserver.com/"
dataSinkBaseUrl = "/outputFolder"
jobs = [
{"jobTitle":"API1","dataSourceApi":"api1/", "dataSinkFile": "1.csv"},
{"jobTitle":"API2","dataSourceApi":"api2/", "dataSinkFile": "2.csv"},
{"jobTitle":"API3","dataSourceApi":"api3/", "dataSinkFile": "3.csv"},
{"jobTitle":"API4","dataSourceApi":"api4/", "dataSinkFile": "4.csv"},
{"jobTitle":"API5","dataSourceApi":"api5/", "dataSinkFile": "5.csv"}
]
for job in jobs:
print '\n'+job['jobTitle']+' job started..'
# fetch data from the api
print ' '+job['dataSourceApi']+' api started ...'
step1Seconds = time.time()
response = requests.get(sourceDataApiBaseUrl+job['dataSourceApi'])
jsonResponse = json.loads(response.text, object_pairs_hook=collections.OrderedDict)
print ' '+job['dataSourceApi']+' api completed, time taken in seconds='+str(time.time() - step1Seconds)
csvContent = ""
for myrow in jsonResponse:
csvContent += '"'+'","'.join(myrow.values())+'"\n'
csvContent = csvContent.rstrip("\n")
print ' '+'file writing started ...'
step2Seconds = time.time()
f= open(dataSinkBaseUrl+"/"+job['dataSinkFile'],"w+")
f.write(csvContent)
f.close()
print ' '+'file writing completed, records='+str(len(jsonResponse))+', time taken in seconds='+str(time.time() - step2Seconds)
p.S. 我还尝试向python添加超时请求。获取方法。我尝试设置更长的超时,比如3600秒,而实际完成api的时间大约是2400秒。在本例中,python在1h(3600s)后抛出读取超时。我检查了api服务器上的api调用日志,它在2400秒左右完成,但客户机从未得到响应并超时:(
目前没有回答
相关问题 更多 >
编程相关推荐