Tôi đang cố gắng sử dụng các phương thức của lớp như nhiệm vụ cần thiết của django, đánh dấu nó bằng cách sử dụng trang trí @task. Tình huống tương tự được ghi rõ here, được hỏi bởi Anand Jeyahar. Đó là một cái gì đó như thế nàysử dụng các phương pháp lớp học làm nhiệm vụ cần tây
class A:
@task
def foo(self, bar):
...
def main():
a = A()
...
# what i need
a.foo.delay(bar) # executes as celery task
a.foo(bar) # executes locally
Vấn đề là ngay cả khi tôi sử dụng ví dụ lớp như a.foo.delay(bar)
này nó nói, rằng foo
nhu cầu ít nhất hai đối số, mà meens rằng self
bỏ lỡ con trỏ.
Thông tin thêm:
- tôi không thể chuyển đổi lớp để mô-đun vì thừa kế
- Phương pháp được phụ thuộc rất nhiều vào các thành viên lớp, vì vậy tôi không thể làm cho họ tĩnh
- Đánh dấu lớp là tác vụ với @task decorator làm cho lớp đó trở thành một nhiệm vụ và có thể thực hiện các phương thức từ phương thức
run()
, sử dụng một số đối số làm khóa để lựa chọn phương pháp, nhưng nó không chính xác những gì tôi muốn. - Tạo một thể hiện của lớp và đi qua nó như
self
tranh luận với các phương pháp thay đổi cách tôi thực hiện phương pháp không như taks cần tây, nhưng như phương pháp thông thường (ví dụ: trong khi thử nghiệm) - Tôi đã cố gắng để tìm hiểu cách thức tôi có thể đăng ký nhiệm vụ theo thực tế, từ nhà xây dựng chẳng hạn, nhưng cần tây chia sẻ mã giữa những người lao động, vì vậy đó là lý do tại sao nó dường như là không thể.
Cảm ơn sự giúp đỡ của bạn!
làm cách nào để bạn thực hiện? các ví dụ tương tự cũng phù hợp với tôi. – asksol
'a = A()' 'a.method (1,2)' hoặc 'a.method.delay (1,2)' - kết quả là giống nhau – eviltnan