我和一个RQ工作人员有问题。
这是我的应用程序的结构:
app/
run.py
project/
__init__.py
clock.py
views.py
worker.py
controllers/
__init__.py
leads_fb.py
一旦我运行我的应用程序,时钟就会执行,这是代码:
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)
then clock enqueues jobs with the rq worker which is 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()
排队作业执行的函数是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)
当我使用根目录中的run.py文件运行我的应用程序时,它会给出错误:importerror:没有名为project.controllers.leads的模块
我的run.py文件包含以下代码:
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)
我的app/project/init.py文件有这个
from flask import Flask
app = Flask(__name__)
app.config.from_object('config')
from . import views
from . import worker
from . import clock
请帮忙!!这件事我已经坚持了一个星期,没办法解决。我已经阅读了其他线程问题,并且已经了解到它必须对pythonpath做一些事情,pythonpath将我的模块目录指向我的rq工作线程,但是我不知道如何实现它。
如何将导入路径添加到worker.py文件?我已经测试过了,如果我用命令行'rqworker'在根目录下启动worker,它可以正常工作。我的应用程序认为worker.py文件在根目录中,但实际上它在根目录中的project/中。如何以及在何处指定它,以便它在本地工作并部署在heroku中?
最佳答案
这是您的错误消息吗?”importerror:没有名为config的模块”
您错过了该行的config.py
app.config.from_object('config')
from_object(obj)
目标可能是
将导入具有该名称的对象
实际的对象引用:直接使用该对象
因此,为了使“config”有效,可以在/app下创建一个config.py
关于python - RQ - ImportError:没有名为XXX的模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49495488/