def perform_requests(self):
signal.signal(signal.SIGINT, self.exit_fast)
signal.signal(signal.SIGTERM, self.exit_fast)
self.state = b'E'
for q_batch in self.get_batch():
for (batch, data) in self.split_batch(q_batch):
hook = partial(self._response_callback, batch=batch)
r = requests.Request(
method='POST',
url=self.endpoint,
headers=self.headers,
data=data,
auth=(self.user, self.api_token),
hooks={'response': hook})
self.n_requests += 1
while True:
self.futures = [i for i in self.futures if not i.done()]
if len(self.futures) < self.concurrency:
self.state = b'R'
f = self._executor.submit(self._request, r)
f.add_done_callback(self.request_cb)
self.futures.append(f)
break
else:
self.state = b'F'
wait(self.futures, return_when=FIRST_COMPLETED)
yield
# wait for all batches to finish before returning
self.state = b'W'
while self.futures:
f_len = len(self.futures)
self.futures = [i for i in self.futures if not i.done()]
if f_len != len(self.futures):
self.ui.debug('Waiting for final requests to finish. '
'remaining requests: {}'
''.format(len(self.futures)))
wait(self.futures, return_when=FIRST_COMPLETED)
self.state = b'D'
yield True
评论列表
文章目录