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