Rq: ImportError: Kein Modul namens project.controllers.leads_fb

Erstellt am 23. März 2018  ·  5Kommentare  ·  Quelle: rq/rq

Hallo !

Ich habe Probleme mit dem rq-Worker.

So ist meine App aufgebaut:

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

clock wird ausgeführt, sobald ich meine App ausführe und dies ist der Code:

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)

Dann stellt Clock Jobs mit dem rq-Worker worker.py in die Warteschlange:

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()

und die Funktion, mit der der Job in der Warteschlange ausgeführt wird, ist 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)

Wenn ich meine App mit der Datei run.py im Stammverzeichnis ausführe, erhalte ich den Fehler:

meine run.py-Datei hat diesen Code:

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)

und meine app/project/__init__.py-Datei hat dies

from flask import Flask

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

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

Bitte helft!! Ich hänge seit einer Woche damit fest und kann es nicht beheben. Ich habe andere Thread-Probleme gelesen und bin zu dem Schluss gekommen, dass es etwas mit dem PYTHONPATH zu tun hat, der mein Modulverzeichnis auf meinen rq-Worker verweist, aber ich habe keine Ahnung, wie ich das implementieren soll. @selwin

Hilfreichster Kommentar

@mateocam es ist nur ein normaler Import von Python-Sys-
Bitte fügen Sie Ihren Beispielcode mit einem einzigen Bash-Skript ein, um Ihren Worker irgendwo auf github zu starten, damit jemand ihn klonen und für Sie zum Laufen bringen kann

Alle 5 Kommentare

Wie kann ich den Importpfad für meine worker.py-Datei hinzufügen? Ich habe es getestet und wenn ich den Worker im Root-Verzeichnis mit der Befehlszeile 'rqworker' starte, funktioniert es einwandfrei. Meine App denkt, dass sich die Datei worker.py im Stammverzeichnis befindet, sich jedoch tatsächlich in project/ im Stammverzeichnis befindet. Wie und wo gebe ich dies an, damit es lokal funktioniert und auch in Heroku bereitgestellt wird?

Wie kann ich den Importpfad für meine worker.py-Datei hinzufügen? Ich habe es getestet und wenn ich den Worker im Root-Verzeichnis mit der Befehlszeile 'rqworker' starte, funktioniert es einwandfrei. Meine App denkt, dass sich die Datei worker.py im Stammverzeichnis befindet, sich jedoch tatsächlich in project/ im Stammverzeichnis befindet. Wie und wo gebe ich dies an, damit es lokal funktioniert und auch in Heroku bereitgestellt wird? @nvie Ich habe die Dokumentation von

Sie können den Befehl rq worker mit dem Argument --path aufrufen.

@selwin Ich rufe den Arbeiter so auf: rq worker --path project/
und es funktioniert immer noch nicht. Ich rufe den Arbeiter im Stammverzeichnis meines Projekts an. Was vermisse ich?

@mateocam es ist nur ein normaler Import von Python-Sys-
Bitte fügen Sie Ihren Beispielcode mit einem einzigen Bash-Skript ein, um Ihren Worker irgendwo auf github zu starten, damit jemand ihn klonen und für Sie zum Laufen bringen kann

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen