def prepare_orm_for_gevent(): """ In order to make psycopg2 work with gevent, we need to apply this patch, otherwise all worker connections will use only one connection which might cause serious issues in production. Also, the patch needs to be applied before creating the db engine. """ gevent_psycopg2.monkey_patch()
def main(args): check_root_user() openerp.tools.config.parse_config(args) if openerp.tools.config.options["gevent"]: openerp.evented = True _logger.info('Using gevent mode') import gevent.monkey gevent.monkey.patch_all() import gevent_psycopg2 gevent_psycopg2.monkey_patch() check_postgres_user() openerp.netsvc.init_logger() report_configuration() config = openerp.tools.config setup_signal_handlers(signal_handler) if config["test_file"]: run_test_file(config['db_name'], config['test_file']) sys.exit(0) if config["translate_out"]: export_translation() sys.exit(0) if config["translate_in"]: import_translation() sys.exit(0) if not config["stop_after_init"]: setup_pid_file() # Some module register themselves when they are loaded so we need the # services to be running before loading any registry. if not openerp.evented: if config['workers']: openerp.service.start_services_workers() else: openerp.service.start_services() else: config['xmlrpc_port'] = config['longpolling_port'] import gevent gevent.spawn(watch_parent) openerp.service.start_services() rc = 0 if config['db_name']: for dbname in config['db_name'].split(','): if not preload_registry(dbname): rc += 1 if config["stop_after_init"]: sys.exit(rc) _logger.info('OpenERP server is running, waiting for connections...') quit_on_signals()
def run(args): # Note that gevent monkey patching must be done before importing the # `threading` module, see http://stackoverflow.com/questions/8774958/. if args.gevent: import gevent import gevent.monkey import gevent.wsgi import gevent_psycopg2 gevent.monkey.patch_all() gevent_psycopg2.monkey_patch() import threading import openerp import openerp.cli.server import openerp.service.wsgi_server import openerp.tools.config config = openerp.tools.config os.environ["TZ"] = "UTC" common.set_addons(args) openerp.multi_process = True common.setproctitle('openerp-web') openerp.cli.server.check_root_user() openerp.netsvc.init_logger() #openerp.cli.server.report_configuration() openerp.cli.server.configure_babel_localedata_path() target = openerp.service.wsgi_server.serve if not args.gevent: openerp.evented = False openerp.cli.server.setup_signal_handlers(openerp.cli.server.signal_handler) # TODO openerp.multi_process with a multi-threaded process probably # doesn't work very well (e.g. waiting for all threads to complete # before killing the process is not implemented). arg = (args.interface, int(args.port), args.threaded) threading.Thread(target=target, args=arg).start() openerp.cli.server.quit_on_signals() else: openerp.evented = True app = openerp.service.wsgi_server.application server = gevent.wsgi.WSGIServer((args.interface, int(args.port)), app) setup_signal_handlers(mk_signal_handler(server)) try: server.serve_forever() except KeyboardInterrupt: try: server.stop() gevent.shutdown() except KeyboardInterrupt: sys.stderr.write("Forced shutdown.\n") gevent.shutdown()
def main(args=None): """Consume the Twitter Streaming API.""" # Write a pid file. f = open('stream.pid', 'w') f.write(str(os.getpid())) f.close() # Parse the command line args. if args is None: args = parse_args() # Read the config file. config = ConfigParser.SafeConfigParser() config.read(args.config_file) # Setup logging. logging.config.fileConfig(args.config_file) # Patch sockets and threading. from gevent import monkey monkey.patch_all() import gevent_psycopg2 gevent_psycopg2.monkey_patch() # Bind the model classes. engine = create_engine(config.get('app:beliveat', 'sqlalchemy.url')) bind_engine(engine) # Instantiate a ``Manager`` with a redis client and oauth handler and # start the manager running. client = get_redis_client() handler = oauth_handler_factory(config) manager = Manager(client, handler, args.input_channel, args.output_channel) # Close the db connection Session.remove() try: manager.start() except KeyboardInterrupt: manager.stop()
def main(args=None): """Process the ``INPUT_CHANNEL`` redis queue.""" # Write a pid file. f = open('queue.pid', 'w') f.write(str(os.getpid())) f.close() # Parse the command line args. if args is None: args = parse_args() # Read the config file. config = ConfigParser.SafeConfigParser() config.read(args.config_file) # Setup logging. logging.config.fileConfig(args.config_file) # Patch sockets, threading and the db driver. from gevent import monkey monkey.patch_all() import gevent_psycopg2 gevent_psycopg2.monkey_patch() # Bind the model classes. engine = create_engine(config.get('app:beliveat', 'sqlalchemy.url')) bind_engine(engine) # Setup the redis queue processor. client = get_redis_client() processor = QueueProcessor(client, [args.input_channel], handle_data) # Close the db connection Session.remove() try: processor.start() except KeyboardInterrupt: pass
#coding:utf-8 import psycopg2,psycogreen import gevent_psycopg2 gevent_psycopg2.monkey_patch() """ 每台车辆 """ class PostgreSqlConnection(object): """ https://pypi.python.org/pypi/psycopg2 http://pythonhosted.org/psycopg2/ http://initd.org/psycopg/ postgresql 9.4+ psycopg2 2.7+ jsonb supported: 2.5.4+ http://initd.org/psycopg/docs/extras.html dict_cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) """ def __init__(self,cfgs): self.cfgs = cfgs self.name = self.cfgs.get('name','') self.conn = None
from gevent.wsgi import WSGIServer import gevent import gevent.monkey import gevent.event import flask gevent.monkey.patch_all() import gevent_psycopg2; gevent_psycopg2.monkey_patch() import pyphilo import sqlalchemy as sa from sqlalchemy.orm import sessionmaker import select import time from flask import Flask app = Flask(__name__) app.debug = True posted = gevent.event.Event() Session = sessionmaker(bind=pyphilo.engine) @app.route("/") def hello(): return "Hello World 2!" @app.route("/poll", methods=["POST"]) def poll(): data = flask.request.json
def patch(): gevent_psycopg2.monkey_patch() extensions.set_wait_callback(gevent_wait_callback)
def post_fork(server, worker): import gevent_psycopg2 gevent_psycopg2.monkey_patch()
""" App""" from gevent import monkey monkey.patch_all() from gevent_psycopg2 import monkey_patch monkey_patch() import weakref import time import itertools import logging import collections import simplejson as json from datetime import datetime, timedelta from flask import Flask, render_template, request, abort from gevent import pool, spawn from gevent.pywsgi import WSGIServer from gevent.queue import Queue, PriorityQueue from geventwebsocket.handler import WebSocketHandler from sqlalchemy import create_engine from sqlalchemy.exc import IntegrityError from werkzeug.serving import run_with_reloader import facebook import settings __all__ = ("app", "main") logging.basicConfig(level=logging.DEBUG) log = logging.getLogger("fw")
# TODO, figure out how to load gevent monkey patch cleanly in production try: from gevent.monkey import patch_all patch_all() import gevent_psycopg2 gevent_psycopg2.monkey_patch() except ImportError: print "unable to apply gevent monkey.patch_all" import os from werkzeug.contrib.fixers import ProxyFix from app import create_app from extensions import assets assets._named_bundles = {} application = create_app() # requires application context assets.auto_build = False if os.environ.get('SENTRY_DSN'): from raven.contrib.flask import Sentry sentry = Sentry() sentry.init_app(application) application.wsgi_app = ProxyFix(application.wsgi_app)
def _post_fork(server, worker): gevent_psycopg2.monkey_patch()
def green_threads(): gevent.monkey.patch_all() gevent_psycopg2.monkey_patch()
#!/usr/bin/env python import os import sys from gevent import monkey monkey.patch_all() from gevent_psycopg2 import monkey_patch monkey_patch() if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "livewire.settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)