Rq: ImportError: Nenhum módulo denominado project.controllers.leads_fb

Criado em 23 mar. 2018  ·  5Comentários  ·  Fonte: rq/rq

Olá !

Estou tendo problemas com o trabalhador rq.

Esta é a estrutura do meu aplicativo:

app/
    run.py
    project/
        __init__.py
        clock.py
        views.py
        worker.py
        controllers/
           __init__.py
           leads_fb.py

clock é executado assim que executo meu aplicativo e este é o código:

from apscheduler.schedulers.background import BackgroundScheduler
from rq import Queue, get_current_job
from rq.job import Job 
from worker import conn
from controllers import leads_fb
import logging
import os


q = Queue(connection=conn)
sched = BackgroundScheduler()

def enque_jobs():
    info = '1aooEOTBQz1pAW915-JonL3Jh2mhclR5EZTHGotFBe7s||blah blah blah'
    job = q.enqueue(leads_fb.prueba, info)  
    print 'This job is run every 3 seconds.'

if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
    sched.add_job(enque_jobs, 'interval', seconds=3)
    sched.start()

log = logging.getLogger('apscheduler.executors.default')
# log.setLevel(logging.INFO)  # DEBUG

# fmt = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
h = logging.StreamHandler()
# h.setFormatter(fmt)
log.addHandler(h)

em seguida, clock enfileira jobs com o trabalhador rq, que é worker.py:

import os

import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

e a função de execução do trabalho enfileirado é controllers / leads_fb.py:

from wksh import init_wksh, get_last_row, write_in_cell

def prueba(info):
    print 'aaaaa'
    info = info.split('||')
    id_client = info[0]
    str_prueba = info[1]
    wksh = init_wksh(id_client)
    print wksh
    row = get_last_row(wksh)

    write_in_cell(wksh,'A'+str(row),str_prueba)
    print 'funciona  ' + str(row)

quando executo meu aplicativo com o arquivo run.py no diretório raiz, ocorre o erro: ImportError: Nenhum módulo denominado project.controllers.leads_fb

meu arquivo run.py tem este código:

from project import app
from project import worker
from project import clock

if __name__ == "__main__":
    app.run(debug=True,host='127.0.0.1', port=1234)

e meu arquivo app / project / __ init__.py tem este

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')

from . import views
from . import worker
from . import clock

Por favor ajude!! Estou preso nisso há uma semana e não consigo consertar. Eu li outros problemas de thread e entendi que tem que fazer algo com o PYTHONPATH que aponta meu diretório de módulo para meu trabalhador rq, mas não tenho ideia de como implementar isso. @selwin

Comentários muito úteis

@mateocam é apenas um material normal de importação de módulo de caminho python sys. você só precisa executá-lo no diretório correto ou instalar seu pacote nas bibliotecas do sistema.
Por favor, coloque seu código de exemplo com um único script bash para iniciar seu trabalhador, em algum lugar do github, para que alguém possa cloná-lo e fazê-lo funcionar para você

Todos 5 comentários

como posso adicionar o caminho de importação para meu arquivo worker.py? Eu testei e se eu iniciar o trabalhador no diretório raiz com a linha de comando 'rqworker', ele funciona bem. Meu aplicativo pensa que o arquivo worker.py está no diretório raiz, mas na verdade está em projeto / dentro do diretório raiz. Como e onde especifico isso para que funcione localmente e também implantado no Heroku?

como posso adicionar o caminho de importação para meu arquivo worker.py? Eu testei e se eu iniciar o trabalhador no diretório raiz com a linha de comando 'rqworker', ele funciona bem. Meu aplicativo pensa que o arquivo worker.py está no diretório raiz, mas na verdade está em projeto / dentro do diretório raiz. Como e onde especifico isso para que funcione localmente e também implantado no Heroku? @nvie Pesquisei a documentação do rq e não consigo encontrar! por favor ajude.

Você pode chamar o rq worker comando com --path argumento.

@selwin Estou chamando o trabalhador desta forma: rq worker --path project /
e ainda não funciona. Estou ligando para o trabalhador no diretório raiz do meu projeto. o que estou perdendo?

@mateocam é apenas um material normal de importação de módulo de caminho python sys. você só precisa executá-lo no diretório correto ou instalar seu pacote nas bibliotecas do sistema.
Por favor, coloque seu código de exemplo com um único script bash para iniciar seu trabalhador, em algum lugar do github, para que alguém possa cloná-lo e fazê-lo funcionar para você

Esta página foi útil?
0 / 5 - 0 avaliações