def test_job_queue_kill_with_error(): def f(): gevent.sleep(999) g = Greenlet(f) queue = lets.JobQueue() queue.put(g) queue.kill(ExpectedError) with pytest.raises(ExpectedError): g.get(block=False)
def test_job_queue_exited(): results = [] def f(x, delay=0): gevent.sleep(delay) results.append(x) return x queue = lets.JobQueue() g1 = Greenlet(f, 1, 0.1) g2 = Greenlet(f, 2, 0.1) queue.put(g1) queue.put(g2) g1.join() queue.kill() queue.join() assert results == [1] assert g1.get() == 1 assert isinstance(g2.get(), gevent.GreenletExit)
def make_preview(url_param, theme, width, height): # on devrait pouvoir builder l'url depuis la resource host = app.config['SERVER_CONFIG']['host'] port = app.config['SERVER_CONFIG']['port'] hostport = "%s:%s" % (host, port) if port else host url = "http://%s/live%s" % (hostport, url_param) # Marche dans le contexte de l'install de dev avec Grunt # local("grunt snap --url=%s --theme=%s --width=%s --height=%s" % (url, ident, width, height)) # Là aussi on évite Grunt, on utilise PhantomJs en direct ... print url dest = os.path.join(theme.static_path, 'img', 'preview.png') script = "app/screenshot.js" if os.environ.get('HEROKU') and int(os.environ.get('HEROKU')) == 1: script = os.path.join('/app', script) # FIXME # Il y a toujours une erreur (non bloquante normalement) avec Phantom (pas systématique...) # quelque soit la méthode choisie, meme résultat : Error: read ECONNRESET # la connexion de PhantomJs pouvait poser pb mais normalement désactivée via test sur UA # exit 0, parceque sinon Phantom: returned non-zero exit status 8 phantom_command = "phantomjs %s %s %s %s %s; exit 0;" % (script, url, dest, width, height) # test fabric # local("phantomjs %s %s %s %s %s" % (script, url, dest, width, height)) # test subprocess # return_call = subprocess.call(phantom_command, shell=True) # test Gevent (tient la route avec Supervisor) # m = gevent.spawn(local, phantom_command) g = Greenlet(local, phantom_command) g.start() g.get(block=True) # g.join() return url
def _request_finished(self, g: Greenlet): """ Ran as a callback when a request has finished. We will check the result object, and add it to the global counters. :param Greenlet g: The greenlet object of this reject. """ result_object = g.get() # type: TaskResult result = result_object.result if result == TaskState.FAILURE: self.failures += 1 self._add_failure_reason(result_object.reason) else: self.passes += 1 self.results_left += -1 # Deal with response time metrics. this_response_time = result_object.response_time if this_response_time is not None: self.response_times.append(this_response_time) self.response_time_count += 1 if this_response_time > self.max_response_time: self.max_response_time = this_response_time self.avg_response_time = \ (self.avg_response_time * (self.response_time_count - 1) + this_response_time) / \ self.response_time_count