Rq: ImportError: Tidak ada modul bernama project.controllers.leads_fb

Dibuat pada 23 Mar 2018  ·  5Komentar  ·  Sumber: rq/rq

Halo !

Saya mengalami masalah dengan pekerja rq.

Ini adalah struktur aplikasi saya:

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

jam dijalankan setelah saya menjalankan aplikasi saya dan ini adalah kodenya:

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)

kemudian jam membuat pekerjaan dengan pekerja rq yaitu pekerja.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()

dan fungsi yang dieksekusi oleh pekerjaan yang antri adalah 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)

ketika saya menjalankan aplikasi saya dengan file run.py di direktori root itu memberi saya kesalahan: ImportError: Tidak ada modul bernama project.controllers.leads_fb

file run.py saya memiliki kode ini:

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)

dan file app/project/__init__.py saya memiliki ini

from flask import Flask

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

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

Tolong bantu!! Saya telah terjebak dengan ini selama seminggu dan tidak dapat memperbaikinya. Saya telah membaca masalah utas lainnya dan memahami bahwa itu ada hubungannya dengan PYTHONPATH yang mengarahkan direktori modul saya ke pekerja rq saya, tetapi saya tidak tahu bagaimana mengimplementasikannya. @selwin

Komentar yang paling membantu

@mateocam itu hanya impor modul jalur python sys biasa. Anda hanya perlu menjalankannya dari direktori yang benar atau menginstal paket Anda ke perpustakaan sistem.
Harap masukkan kode contoh Anda dengan satu skrip bash untuk memulai pekerja Anda, di suatu tempat di github, sehingga seseorang dapat mengkloningnya dan membuatnya bekerja untuk Anda

Semua 5 komentar

bagaimana saya bisa menambahkan jalur impor untuk file worker.py saya? Saya telah menguji dan jika saya memulai pekerja di direktori root dengan baris perintah 'rqworker' itu berfungsi dengan baik. Aplikasi saya berpikir bahwa file worker.py ada di direktori root, tetapi sebenarnya ada di project/ di dalam direktori root. Bagaimana dan di mana saya menentukan ini sehingga berfungsi secara lokal dan juga digunakan di Heroku?

bagaimana saya bisa menambahkan jalur impor untuk file worker.py saya? Saya telah menguji dan jika saya memulai pekerja di direktori root dengan baris perintah 'rqworker' itu berfungsi dengan baik. Aplikasi saya berpikir bahwa file worker.py ada di direktori root, tetapi sebenarnya ada di project/ di dalam direktori root. Bagaimana dan di mana saya menentukan ini sehingga berfungsi secara lokal dan juga digunakan di Heroku? @nvie Saya telah mencari dokumentasi rq dan saya tidak dapat menemukannya! tolong bantu.

Anda dapat memanggil perintah rq worker dengan argumen --path .

@selwin Saya memanggil pekerja dengan cara ini: rq worker --path project/
dan itu masih tidak berhasil. Saya memanggil pekerja di direktori root proyek saya. apa yang saya lewatkan?

@mateocam itu hanya impor modul jalur python sys biasa. Anda hanya perlu menjalankannya dari direktori yang benar atau menginstal paket Anda ke perpustakaan sistem.
Harap masukkan kode contoh Anda dengan satu skrip bash untuk memulai pekerja Anda, di suatu tempat di github, sehingga seseorang dapat mengkloningnya dan membuatnya bekerja untuk Anda

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

nvie picture nvie  ·  3Komentar

alkalinin picture alkalinin  ·  3Komentar

mitakuye picture mitakuye  ·  7Komentar

kitsuyui picture kitsuyui  ·  4Komentar

f0cker picture f0cker  ·  4Komentar