2015-04-17 15 views
5

Tôi đang phát triển một ứng dụng Flask và tận dụng các bản thiết kế. Tôi dự định sử dụng hàng đợi công việc cần tây. Tôi cố gắng để hiểu được những lợi ích hoặc lý do để sử dụng một cái gì đó giống nhưChức năng nhà máy cần tây và nhập khẩu cần tây

def make_celery(app): 
    celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL']) 
    celery.conf.update(app.config) 
    TaskBase = celery.Task 
    class ContextTask(TaskBase): 
     abstract = True 
     def __call__(self, *args, **kwargs): 
      with app.app_context(): 
       return TaskBase.__call__(self, *args, **kwargs) 
    celery.Task = ContextTask 
    return celery 

và sau đó làm

celery = make_celery(app) 

và nhập nó vào tasks.py của tôi so với chỉ nhập khẩu và tạo ra một trường hợp cần tây trong nhiệm vụ của tôi .py như

from celery import Celery 

app = Celery('hello', broker='amqp://[email protected]//') 
@app.task 
def mytask(): 
+0

Lợi thế - điều rất quan trọng nếu bạn đang sử dụng bản thiết kế - là bạn không phải lo lắng quá nhiều về thứ tự nhập khẩu và nhập khẩu vòng tròn. –

+0

Có vấn đề gì với bối cảnh ứng dụng khi bạn không sử dụng cách make_celery không? – user982599

Trả lời

2

Nếu bạn đang viết một công việc đơn giản, tốt hơn là nhập cần tây & trang trí chức năng của bạn.

Nếu bạn đang tạo một số tác vụ phức tạp, tốt hơn là nên hủy Tác vụ. Ở đây bạn sẽ nhận được sức mạnh của OOP. Bạn có thể phá vỡ mã của bạn thành các khối nhỏ. Điều đó giúp đơn vị kiểm tra mã của bạn dễ dàng hơn. Ngoài ra nếu bạn muốn một số cấu hình tùy chỉnh cho tất cả các nhiệm vụ của bạn, bạn có thể có một baseclass tùy chỉnh & bạn có thể kế thừa từ nó cho tất cả các nhiệm vụ.

+0

Tôi có cần phải lo lắng về cần tây và bối cảnh ứng dụng Flask khi chỉ cần nhập khẩu cần tây và trang trí công việc của tôi? Cần tây cần phải có quyền truy cập vào nó hoặc tôi ok chỉ cần làm một cái gì đó như 'với app.context(): runtask.delay()' – user982599

+0

tôi không biết về app.context, nhưng bạn không cần phải lo lắng về cần tây trong bối cảnh đó. – ChillarAnand