未找到Redis队列工作模块

2024-04-26 18:01:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有dockrized容器来运行flask app。在配置了redisrq worker之后,我得到了工作任务中module not found的错误。我确信这是一些路径问题,我似乎无法确定我的工作人员找到flask应用程序中使用的任何模块的正确路径

以下是我当前的项目结构:

- core-app
  - app.py
  - worker.py
  - dashboard
    - Dockerfile
  - symbol
    - __init__.py
    - symbol.py
  - Dockerfile
  - docker-compose.yml

docker-compose.yml

version: "3.7"
services:

  db:
    image: mongo
    ports:
      - "27017:27017"

  api:
    image: core-app:latest
    build: .
    command: python -u app.py
    ports:
      - "5000:5000"
    depends_on:
      - db
      - core_redis

  worker:
      image: core-app:latest
      command: rq worker --path /core-app/ --url redis://core_redis:6379 my_queue
      depends_on:
        - core_redis

  core_redis:
      image: redis:5.0.8-alpine
      ports:
        - "6379:6379"
      volumes:
        - ./redis:/data

  dashboard:
      build: ./dashboard
      image: dashboard
      container_name: dashboard
      ports:
        - 9181:9181
      command: rq-dashboard -H core_redis
      depends_on:
        - core_redis

worker.py

from symbol import symbol

def run_symbol_worker_task(symbol_id):
    print('starting worker tasks for: ' + symbol_id) # in place of actual logging
    symbol.some_func_here()
    return {symbol_id: 'task complete'}

app.py

redis_conn = Redis(host='core_redis', port=6379, db=0)
q = Queue('my_queue', connection=redis_conn)
q.empty()

job = q.enqueue(run_symbol_worker_task, 'key')
print(job.get_status())

我得到的错误是:

worker_1      | Traceback (most recent call last):
worker_1      |   File "/usr/local/lib/python3.7/site-packages/rq/worker.py", line 822, in perform_job
worker_1      |     rv = job.perform()
worker_1      |   File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 605, in perform
worker_1      |     self._result = self._execute()
worker_1      |   File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 611, in _execute
worker_1      |     return self.func(*self.args, **self.kwargs)
worker_1      |   File "/usr/local/lib/python3.7/site-packages/rq/job.py", line 200, in func
worker_1      |     return import_attribute(self.func_name)
worker_1      |   File "/usr/local/lib/python3.7/site-packages/rq/utils.py", line 155, in import_attribute
worker_1      |     module = importlib.import_module(module_name)
worker_1      |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
worker_1      |     return _bootstrap._gcd_import(name[level:], package, level)
worker_1      |   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
worker_1      |   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
worker_1      |   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
worker_1      |   File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
worker_1      |   File "<frozen importlib._bootstrap_external>", line 728, in exec_module
worker_1      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
worker_1      |   File "/core-app/worker.py", line 5, in <module>
worker_1      |     from symbol import symbol
worker_1      | ImportError: cannot import name 'symbol' from 'symbol' (/usr/local/lib/python3.7/symbol.py)

我不明白为什么路径没有设置为在我的根目录中查找,而是查找usr/local/lib/python3.7


Tags: inpycoreimportredisapplibusr