2012-07-16 18 views
5

he estado trabajando en el sistema de sondeo largo. yo uso matraz + mongokit + apio + genciana.quiero usar gevent.evnet en apio.ask

Cuando el proceso en la tarea de apio, se hace gevent.event.set() dos veces no funciona. así que quiero ayudar a resolverlo. (La razón por la que uso el gevent al mismo tiempo que el apio, hay un gran proceso para tratar en el sistema de notificaciones)

aquí está mi código de muestra. se añade

#server.py 
@celery.task() 
def doing_task(uid, message): 
    notification = Notification() # this is a notification Model 
    notification.add(request.args.get('to'), some_notification) 
    app.event.set() 
    app.event.clear() 

@app.route('/main') 
def main(): 
    return render_template('main.html') 

@app.route('/set') 
def set(): 
    doing_task.delay(request.args.get('uid'), 'Notify') 
    return 'OK' 

@app.route('/poll') 
def poll(): 
    uid = request.args.get('uid') 
    app.event.wait() 
    if is_authorized(uid): #uid 1 is a authorized account 
     return Notification().get(uid) 

#main.html 
<body> 
    <button>Click me</button> 
</body> 
<script> 
    $('button').click(function(e) { 
    $.ajax({ 
    'url': '/set', 
    'data': 'uid=1', 
    'success': function(data) { 
     console.log(data); 
    } 
    }); 
    e.preventDefault(); 
    }); 

     var poll = function() { 
    return $.ajax({ 
      'url': '/poll', 
      'method': 'get', 
      'async':true, 
      'dataType': 'json', 
      'timeout': 10000, 
      'success': function(data) { 
      console.log(data); 
      setTimeout(poll, 50); 
      }, 
      'error':function (req,sta,er){ 
      setTimeout(poll, 3000); 
      }, 
     }); 
    }; 
    poll() 
</script> 

Respuesta

4

Ahora, en un matraz de 0,9 Flask.app_context, con Flask.app_context se puede obtener un contexto de corriente.

Ver Application Context.

Por ejemplo,

from flask import Flask 
from celery import Celery 

app = Flask(__name__) 
celery = Celery(__name__) 

@celery.task 
def hello(): 
    # Also, you are able to deal with current request as use test_request_context 
    with app.app_context(): 
     print current_app 
    with app.test_request_context() as request: 
     print('Hello {0!r}'.format(request)) 
Cuestiones relacionadas