【发布时间】:2017-05-23 15:17:15
【问题描述】:
我正在尝试使用 Python 3 在服务器上进行压力测试。这个想法是每 1 秒向 API 服务器发送一个 HTTP 请求,持续 30 分钟。我尝试使用 requests 和 apscheduler 来做到这一点,但我一直得到
作业“send_request(触发:interval[0:00:01],下次运行时间:2017-05-23 11:05:46 EDT)”的执行 已跳过:已达到最大运行实例数 (1)
我怎样才能做到这一点?以下是我目前的代码:
import requests, json, time, ipdb
from apscheduler.schedulers.blocking import BlockingScheduler as scheduler
def send_request():
url = 'http://api/url/'
# Username and password
credentials = { 'username': 'username', 'password': 'password'}
# Header
headers = { 'Content-Type': 'application/json', 'Client-Id': 'some string'}
# Defining payloads
payload = dict()
payload['item1'] = 1234
payload['item2'] = 'some string'
data_array = [{"id": "id1", "data": "some value"}]
payload['json_data_array'] = [{ "time": int(time.time()), "data": data_array]
# Posting data
try:
request = requests.post(url, headers = headers, data = json.dumps(payload))
except (requests.Timeout, requests.ConnectionError, requests.HTTPError) as err:
print("Error while trying to POST pid data")
print(err)
finally:
request.close()
print(request.content)
return request.content
if __name__ == '__main__':
sched = scheduler()
print(time.time())
sched.add_job(send_request, 'interval', seconds=1)
sched.start()
print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
# This is here to simulate application activity (which keeps the main thread alive).
while true:
pass
except (KeyboardInterrupt, SystemExit):
# Not strictly necessary if daemonic mode is enabled but should be done if possible
scheduler.shutdown()
我尝试搜索堆栈溢出,但到目前为止,其他问题都没有达到我想要的效果,或者我错过了一些东西。如果是这样的话,我会很感激有人指出我正确的线程。非常感谢!
【问题讨论】:
-
@calico_ 谢谢,很快就会看看。
-
@calico_ 是的,问题是请求时间超过 1 秒。但由于这是一个压力测试,如果请求已经到位,我不能跳过该请求。我希望代码做的是即使先前的请求尚未完成/尚未返回,也要发出 API 请求。
-
是的,抱歉,其他答案不彻底。我编辑了答案以包含解决方案。
标签: python