2012-10-08 25 views
6

Tôi đang gặp vấn đề sau với dự án Python/Celery của tôi trong Eclipse/PyDev. tôi đã xác định chức năng nhiệm vụ của tôi trong mô-đun myapp.tasks như thế này:PyDev không nhận ra trang trí nhiệm vụ Celery

@celery.task(max_retries=None) 
def mytask(parm1): 
    ... 
    myapp.myfunction(parm1) 
    ... 

Sau đó, trong mô-đun khác tôi muốn gửi một tín hiệu thử lại với nhiệm vụ đó là gọi hàm. Vì vậy, tôi làm như thế này:

import myapp.tasks 
... 
def myfunction(parm1): 
    ... 
    raise myapp.tasks.mytask.retry(countdown=60) 

Theo một số lý do PyDev đánh dấu dòng cuối cùng với một lỗi nói rằng: 'biến Không xác định từ nhập khẩu: retry' Nhưng mã thực sự hoạt động. Đây có phải là vấn đề PyDev không nhận ra người trang trí hay tôi đang làm điều gì sai ở đây?

+0

Bạn đã cài đặt cần tây sau khi bạn thiết lập dự án pydev (hoặc chính xác hơn, thông dịch viên python của bạn)? – RickyA

+1

Vấn đề tương tự ở đây với ".delay()". Bạn có sửa chữa không? –

Trả lời

0

Pydev rõ ràng đang sử dụng phân tích tĩnh, điều này khá lạ đối với ngôn ngữ động. Nhưng tôi đã thêm một hack bây giờ mà nên để PyDev thành công phân tích tĩnh mô-đun cần tây. Bạn có thể dùng thử bằng cách cài đặt nhánh 3.0:

pip install https://github.com/celery/celery/zipball/3.0 
+5

Tôi đang chạy cần tây 3.0.12 và tôi vẫn gặp lỗi này trong pydev –

0

PyDev sử dụng phân tích tĩnh. Bạn có thể thêm "Dựng sẵn cưỡng bức" để giải quyết dấu lỗi.

  1. Tới Window -> Preferences
  2. Chọn PyDev -> Người phiên dịch -> Python phiên dịch ở khung bên trái
  3. Chọn dịch viên python bạn đang sử dụng cho cần tây trong khung bên phải
  4. Đồng phía dưới, chọn "Bultins buộc" và bấm vào nút "New ..."
  5. Thêm myapp.tasks.mytask hoặc bất kỳ loại khác theo yêu cầu

Trong trường hợp của tôi, tôi cần thiết để quảng cáo d "celery.decorators" để giải quyết một lỗi tương tự. Tôi đang sử dụng Eclipse Neon (4.6.3), nhưng giao diện đã thay đổi rất ít. Tôi đã sử dụng kỹ thuật này để giải quyết các lỗi trong Protocol Buffers trong vài năm.

Các vấn đề liên quan