Lỗi đệ quy cần tây: vượt quá độ sâu đệ quy tối đa trong khi gọi một đối tượng python

Lỗi đệ quy cần tây: vượt quá độ sâu đệ quy tối đa trong khi gọi một đối tượng python

原因:celery会使用redis数据库,这时有可能是因为数据库连接redis数据库的密码错误导致的。确认一下密码。 

原来的配置文件:

 broker_url= "redis://8.136.181.55:6379/10"

celery后台发生异常

Lỗi đệ quy cần tây: vượt quá độ sâu đệ quy tối đa trong khi gọi một đối tượng python

 解决-修改配置文件:

broker_url= "redis://:[email protected]:6379/10"

 其中xxxxx是密码,密码前必须加冒号

再重启celery

celery -A celery_tasks.main worker -l info

运行:

Lỗi đệ quy cần tây: vượt quá độ sâu đệ quy tối đa trong khi gọi một đối tượng python

Lần đầu sử dụng Django Celery, mới đối với Django và Celery

Dưới đây là những gì tôi đã cố gắng cho đến nay. Tôi nhận được lỗi sau

RuntimeError tại /contacts/upload độ sâu đệ quy tối đa vượt quá

Tôi đang sử dụng SQS và trình môi giới tin nhắn

cài đặt. py

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'

nhiệm vụ. py

@task
def upload(request, **kwargs):
    file = request.FILES['file']
    ContactCSVModel.import_from_file(file)
    return True

lượt xem. py

@login_required
def upload(request):

            result = upload(request)
            if result:
                messages.add_message(request, messages.SUCCESS, 'Items have been added to the database.')
        else:

         etc

Ai đó có thể vui lòng giúp tôi hiểu những gì tôi đang làm sai ở đây. Cảm ơn bạn

Celery đặt mục tiêu trở thành một giải pháp linh hoạt và đáng tin cậy, tốt nhất để xử lý một lượng lớn tin nhắn theo kiểu phân tán, đồng thời cung cấp cho các hoạt động các công cụ để duy trì một hệ thống như vậy

Celery có một cộng đồng người dùng và cộng tác viên lớn và đa dạng, bạn nên tham gia cùng chúng tôi trên IRC hoặc our mailing-list.

Để đọc thêm về Cần tây, bạn nên truy cập trang web của chúng tôi

Mặc dù phiên bản này tương thích ngược với các phiên bản trước nhưng điều quan trọng là bạn phải đọc phần sau

If you use Celery in combination with Django you must also read the django-celery changelog and upgrade to django-celery 2.5.

Phiên bản này được hỗ trợ chính thức trên CPython 2. 5, 2. 6, 2. 7, 3. 2 và 3. 3, cũng như PyPy và Jython

  • Ghi chú quan trọng

    • Nhóm kết nối môi giới hiện được bật theo mặc định

    • Hệ thống phụ trợ kết quả Rabbit. Exchange không còn tự động xóa nữa

    • Giải pháp treo công nhân (nhưng phải bật thủ công)

  • Tối ưu hóa

  • Thay đổi dòng thời gian ngừng sử dụng

    • Loại bỏ

    • mô-đun không dùng nữa

  • Tin tức

    • hỗ trợ múi giờ

    • Bộ nối tiếp bảo mật mới sử dụng ký mã hóa

    • Cài đặt

      CELERY_RESULT_EXCHANGE = 'celeryresults2'
      
      1 mới

    • CELERY_RESULT_EXCHANGE = 'celeryresults2'
      
      2 cung cấp tác vụ hiện đang thực thi

    • Trong những tin tức khác

  • Sửa lỗi

Lưu ý quan trọng¶

Nhóm kết nối môi giới hiện được bật theo mặc định¶

Giới hạn mặc định là 10 kết nối, nếu bạn có nhiều luồng/luồng xanh sử dụng kết nối cùng lúc, bạn có thể muốn điều chỉnh giới hạn này để tránh tranh chấp

Xem cài đặt

CELERY_RESULT_EXCHANGE = 'celeryresults2'
3 để biết thêm thông tin

Cũng lưu ý rằng các tác vụ xuất bản sẽ được thử lại theo mặc định, để thay đổi mặc định này hoặc chính sách thử lại mặc định, hãy xem

CELERY_RESULT_EXCHANGE = 'celeryresults2'
4 và
CELERY_RESULT_EXCHANGE = 'celeryresults2'
5

Rabbit Kết quả phụ trợ. Exchange không còn tự động xóa¶

Trao đổi được sử dụng cho các kết quả trong chương trình phụ trợ kết quả Rabbit (AMQP) đã từng đặt cờ auto_delete, điều này có thể dẫn đến tình trạng tương tranh dẫn đến cảnh báo khó chịu

Đối với người dùng RabbitMQ

Các trao đổi cũ được tạo bằng cờ auto_delete được bật phải bị xóa

Lệnh camqadm có thể được sử dụng để xóa trao đổi trước đó

broker_url= "redis://:[email protected]:6379/10"
1

Thay thế cho việc xóa trao đổi cũ, bạn có thể định cấu hình tên mới cho trao đổi

CELERY_RESULT_EXCHANGE = 'celeryresults2'

Nhưng bạn phải đảm bảo rằng tất cả khách hàng và nhân viên đều sử dụng cài đặt mới này để họ được cập nhật để sử dụng cùng một tên trao đổi

Giải pháp treo công nhân (nhưng phải bật thủ công)¶

Cài đặt CELERYD_FORCE_EXECV đã được thêm vào để giải quyết vấn đề về bế tắc bắt nguồn từ các luồng và ngã ba được trộn lẫn với nhau

broker_url= "redis://:[email protected]:6379/10"
3

Cài đặt này được khuyến nghị cho tất cả người dùng sử dụng nhóm prefork, nhưng đặc biệt là người dùng cũng sử dụng giới hạn thời gian hoặc cài đặt nhiệm vụ tối đa cho mỗi con

  • Xem Vấn đề Python 6721 để đọc thêm về vấn đề này và tại sao sử dụng

    CELERY_RESULT_EXCHANGE = 'celeryresults2'
    
    6 là giải pháp an toàn duy nhất

Kích hoạt tùy chọn này sẽ dẫn đến một hình phạt nhẹ về hiệu suất khi các quy trình nhân viên con mới được bắt đầu và nó cũng sẽ tăng mức sử dụng bộ nhớ (nhưng nhiều nền tảng được tối ưu hóa, do đó tác động có thể là tối thiểu). Xem xét rằng nó đảm bảo độ tin cậy khi thay thế các quy trình công nhân bị mất, nó đáng giá

  • Nó đã là hành vi mặc định trên Windows

  • Nó sẽ là hành vi mặc định cho tất cả các nền tảng trong phiên bản tương lai

Tối ưu hóa¶

  • Đường dẫn mã được sử dụng khi nhân viên thực thi một tác vụ đã được tối ưu hóa rất nhiều, nghĩa là nhân viên có thể xử lý nhiều tác vụ hơn/giây so với các phiên bản trước. Ví dụ: nhóm solo hiện có thể xử lý tới 15000 tác vụ/giây trên MacBook Pro 4 lõi khi sử dụng phương tiện vận chuyển pylibrabbitmq, nơi trước đây nó chỉ có thể thực hiện 5000 tác vụ/giây

  • Truy nguyên lỗi tác vụ hiện ngắn hơn nhiều

  • Đã khắc phục sự chậm trễ đáng chú ý trong quá trình xử lý tác vụ khi giới hạn tốc độ được bật

Thay đổi dòng thời gian ngừng sử dụng¶

Loại bỏ¶

  • Chữ ký

    CELERY_RESULT_EXCHANGE = 'celeryresults2'
    
    7 cũ của
    CELERY_RESULT_EXCHANGE = 'celeryresults2'
    
    8 không còn được sử dụng nữa (ban đầu được lên kế hoạch xóa trong 2. 4). Các thuộc tính
    CELERY_RESULT_EXCHANGE = 'celeryresults2'
    
    9 và
    broker_url= "redis://:[email protected]:6379/10"
    30 không dùng nữa cũng đã bị xóa

  • Các chức năng

    broker_url= "redis://:[email protected]:6379/10"
    31,
    broker_url= "redis://:[email protected]:6379/10"
    32 và
    broker_url= "redis://:[email protected]:6379/10"
    33 đã bị xóa (ban đầu) được lên kế hoạch xóa sau 2. 3)

  • Tác vụ

    broker_url= "redis://:[email protected]:6379/10"
    34 tích hợp sẵn đã bị xóa (ban đầu được lên kế hoạch xóa sau 2. 3). Vui lòng sử dụng lệnh phát sóng ping để thay thế

  • Không thể nhập

    broker_url= "redis://:[email protected]:6379/10"
    35 và
    CELERY_RESULT_EXCHANGE = 'celeryresults2'
    
    7 từ
    broker_url= "redis://:[email protected]:6379/10"
    37 nữa, thay vào đó, vui lòng nhập chúng từ
    broker_url= "redis://:[email protected]:6379/10"
    38 (dự kiến ​​ban đầu sẽ xóa sau 2. 4)

Các mô-đun không dùng nữa¶

  • Mô-đun

    broker_url= "redis://:[email protected]:6379/10"
    39 đã thay đổi trạng thái từ đang chờ phản đối sang không dùng nữa và được lên lịch xóa trong phiên bản 4. 0. Phải sử dụng mô-đun
    broker_url= "redis://:[email protected]:6379/10"
    38 thay thế

Tin tức¶

Hỗ trợ múi giờ¶

Cần tây hiện có thể được định cấu hình để coi tất cả các ngày đến và đi là UTC và múi giờ địa phương có thể được định cấu hình

Tính năng này chưa được bật theo mặc định, vì việc bật hỗ trợ múi giờ có nghĩa là các công nhân đang chạy các phiên bản trước 2. 5 sẽ không đồng bộ với các công nhân được nâng cấp

Để bật UTC, bạn phải đặt

celery -A celery_tasks.main worker -l info
91

celery -A celery_tasks.main worker -l info
9

Khi UTC được bật, ngày và giờ trong thông báo tác vụ sẽ được chuyển đổi thành UTC, sau đó được chuyển đổi trở lại múi giờ địa phương khi nhân viên nhận được

Bạn có thể thay đổi múi giờ địa phương bằng cài đặt

celery -A celery_tasks.main worker -l info
92. Nên cài đặt thư viện pytz khi sử dụng múi giờ tùy chỉnh, để luôn cập nhật định nghĩa múi giờ, nhưng nó sẽ dự phòng cho định nghĩa hệ thống của múi giờ nếu có

UTC sẽ được bật theo mặc định trong phiên bản 3. 0

Ghi chú

django-celery sẽ sử dụng múi giờ địa phương như được chỉ định bởi cài đặt

celery -A celery_tasks.main worker -l info
93, nó cũng sẽ tôn trọng cài đặt USE_TZ mới được giới thiệu trong Django 1. 4

Bộ nối tiếp bảo mật mới sử dụng ký mã hóa¶

Một bộ nối tiếp mới đã được thêm vào để ký và xác minh chữ ký của thư

Tên của serializer mới là

celery -A celery_tasks.main worker -l info
94 và cần cấu hình bổ sung để hoạt động (xem Bảo mật ).

Xem thêm

Bảo vệ

Được đóng góp bởi Mher Movsisyan

Cài đặt CELERY_RESULT_EXCHANGE = 'celeryresults2' 1 mới¶

Cài đặt mới này cho phép cấu hình sửa đổi các lớp tác vụ và thuộc tính của chúng

Cài đặt có thể là một lệnh hoặc danh sách các đối tượng chú thích lọc các tác vụ và trả về bản đồ các thuộc tính để thay đổi

Ví dụ, đây là chú thích để thay đổi thuộc tính

celery -A celery_tasks.main worker -l info
96 cho tác vụ
celery -A celery_tasks.main worker -l info
97

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
7

hoặc thay đổi tương tự cho tất cả các nhiệm vụ

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
8

Bạn cũng có thể thay đổi các phương thức, ví dụ như trình xử lý

celery -A celery_tasks.main worker -l info
98

@task
def upload(request, **kwargs):
    file = request.FILES['file']
    ContactCSVModel.import_from_file(file)
    return True
0

Nếu bạn cần linh hoạt hơn thì bạn cũng có thể tạo các đối tượng lọc các tác vụ để chú thích

@task
def upload(request, **kwargs):
    file = request.FILES['file']
    ContactCSVModel.import_from_file(file)
    return True
1

CELERY_RESULT_EXCHANGE = 'celeryresults2' 2 cung cấp tác vụ hiện đang thực thi¶

Proxy

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
70 mới sẽ luôn cung cấp tác vụ hiện đang thực thi

Thí dụ

@task
def upload(request, **kwargs):
    file = request.FILES['file']
    ContactCSVModel.import_from_file(file)
    return True
4

Trước đây, bạn phải nhập

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
71 tại đây, điều này có thể gây khó chịu cho các tên nhiệm vụ dài

Ghi chú

Điều này sẽ không hoạt động nếu chức năng tác vụ được gọi trực tiếp (tôi. e. ,

# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
72). Để làm việc đó phải sử dụng
# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
73.
# Celery

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += (
    'south',
    'userena',
    'social_auth',
    'djcelery',


)

BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'zyx'
74

Trong những tin tức khác¶

  • Bây giờ phụ thuộc vào Kombu 2. 1. 0

  • Hỗ trợ Hợp âm hiệu quả cho phụ trợ Memcached ( Số phát hành #533 )

    Điều này có nghĩa là Memcached kết hợp với Redis trong khả năng thực hiện các hợp âm không bỏ phiếu

    Đóng góp bởi Dan McGee

  • Thêm hỗ trợ Hợp âm cho phụ trợ kết quả Rabbit (amqp)

    Chương trình phụ trợ kết quả Rabbit hiện có thể sử dụng giải pháp hợp âm dự phòng

  • Gửi

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    75 đến
    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76 bây giờ sẽ khiến nó chấm dứt

    Đó là, nó sẽ không hoàn thành việc thực thi các tác vụ mà nó hiện đang thực hiện

    Được đóng góp bởi Alec Clowes

  • Chế độ “chi tiết” mới cho phần phụ trợ Cassandra

    Cho phép có chế độ “chi tiết” cho phần phụ trợ Cassandra. Về cơ bản, ý tưởng là giữ tất cả các trạng thái bằng cách sử dụng các cột rộng của Cassandra. Các trạng thái mới sau đó được thêm vào hàng dưới dạng các cột mới, trạng thái cuối cùng là cột cuối cùng

    Xem cài đặt

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    77

    Đóng góp bởi Steeve Morin

  • Trình phân tích cú pháp Crontab hiện khớp với hành vi của Vixie Cron khi phân tích phạm vi theo các bước (e. g. , 1-59/2)

    Được đóng góp bởi Daniel Hepper

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    78 hiện có thể được cấu hình trên dòng lệnh như
    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76

    Cấu hình bổ sung phải được thêm vào cuối danh sách đối số, theo sau là

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    80, ví dụ:

    @login_required
    def upload(request):
    
                result = upload(request)
                if result:
                    messages.add_message(request, messages.SUCCESS, 'Items have been added to the database.')
            else:
    
             etc
    
    5

  • Bây giờ giới hạn số lượng khung hình trong truy nguyên để

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76 không gặp sự cố khi vượt quá giới hạn đệ quy tối đa, vượt quá các ngoại lệ ( Số phát hành #615 ).

    Giới hạn được đặt thành giới hạn đệ quy hiện tại chia cho 8 (theo mặc định là 125)

    Để nhận hoặc đặt giới hạn đệ quy hiện tại, hãy sử dụng

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    82 và
    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    83

  • Nhiều thông tin hiện được lưu giữ trong truy nguyên có thể ngâm được

    Điều này đã được thêm vào để Sentry có thể hiển thị thêm chi tiết

    Được đóng góp bởi Sean O'Connor

  • CentOS init-script đã được cập nhật và sẽ linh hoạt hơn

    Được đóng góp bởi Andrew McFague

  • Phần phụ trợ kết quả MongoDB hiện hỗ trợ

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    84

    Được đóng góp bởi Andrew McFague

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    85 hiện tăng lại ngoại lệ ban đầu để giữ dấu vết ngăn xếp ban đầu

    Được đề xuất bởi @ojii

  • Đối số –uid cho daemon hiện sử dụng

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    86 để đặt nhóm cho tất cả các nhóm mà người dùng là thành viên của

    Được đóng góp bởi Łukasz Oleś

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    87. Đã thêm lệnh
    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    88

    Shell sẽ có current_app (

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    89) và tất cả các tác vụ sẽ tự động được thêm vào địa phương

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    87. Đã thêm lệnh
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    01

    Lệnh di chuyển chuyển tất cả các tác vụ từ nhà môi giới này sang nhà môi giới khác. Lưu ý rằng đây là thử nghiệm và bạn nên sao lưu dữ liệu trước khi tiếp tục

    ví dụ

    CELERY_RESULT_EXCHANGE = 'celeryresults2'
    
    0

  • Các bộ định tuyến hiện có thể ghi đè

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    02 và
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    03 được sử dụng để tạo hàng đợi bị thiếu ( Sự cố #577 ).

    Theo mặc định, điều này sẽ luôn sử dụng tên của hàng đợi, nhưng giờ đây bạn có thể có một bộ định tuyến return exchange và các khóa định tuyến_key để đặt chúng

    Điều này hữu ích khi sử dụng các lớp định tuyến quyết định đích đến trong thời gian chạy

    Contributed by Akira Matsuzaki

  • Redis kết quả phụ trợ. Thêm hỗ trợ cho tham số

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    04

    Giờ đây, có thể định cấu hình số lượng kết nối đồng thời tối đa trong nhóm kết nối Redis được sử dụng cho kết quả

    Cài đặt kết nối tối đa mặc định có thể được định cấu hình bằng cài đặt

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    05 hoặc có thể thay đổi cài đặt này riêng lẻ bằng
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    06

    Đóng góp bởi Steeve Morin

  • Redis kết quả phụ trợ. Thêm khả năng chờ kết quả mà không cần bỏ phiếu

    Đóng góp bởi Steeve Morin

  • MongoDB phụ trợ kết quả. Hiện hỗ trợ lưu và khôi phục

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    07

    Được đóng góp bởi Julien Poissonnier

  • Có hướng dẫn Bảo mật mới trong tài liệu.

  • Các tập lệnh init đã được cập nhật và nhiều lỗi đã được sửa

    Được đóng góp bởi Chris Streeter

  • Người dùng (dấu ngã) hiện được mở rộng trong đối số dòng lệnh

  • Bây giờ có thể định cấu hình biến môi trường

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    08 trong
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    09

    Mặc dù không cần thiết cho hoạt động, celeryctl được sử dụng cho lệnh

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    10 và đường dẫn đến celeryctl phải được định cấu hình để lệnh đó hoạt động

    Cuốn sách nấu ăn daemonization chứa các ví dụ

    Được đóng góp bởi Jude Nagurney

  • Phần phụ trợ kết quả MongoDB hiện có thể sử dụng Bộ bản sao

    Được đóng góp bởi Ivan Metzlar

  • sự kiện. Hiện hỗ trợ tính năng tự động thay đổi quy mô ( Số phát hành #599 ).

    Được đóng góp bởi Mark Lavin

  • đa xử lý. Chuỗi hòa giải hiện luôn được bật, ngay cả khi giới hạn tốc độ bị tắt, vì semaphore nhóm được biết là chặn chuỗi chính, khiến các lệnh quảng bá và tắt máy phụ thuộc vào semaphore được giải phóng

Sửa lỗi¶

  • Các ngoại lệ được nâng cấp lại với một đối tượng ngoại lệ mới hiện giữ nguyên dấu vết ngăn xếp ban đầu

  • các cửa sổ. Đã sửa lỗi cảnh báo

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    11

  • các cửa sổ. Chương trình

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76 hiện có thể được sử dụng

    Người dùng Windows trước đây phải khởi chạy

    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76 bằng cách sử dụng
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    14

  • Redis kết quả phụ trợ. Bây giờ sử dụng lệnh

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    15 để đặt khóa kết quả và hết hạn nguyên tử

    Được đề xuất bởi @yaniv-aknin

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76. Đã khắc phục sự cố khi tắt máy bị treo khi Control-c được sử dụng để kết thúc

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    76. Không còn bị treo khi xảy ra lỗi kênh

    Bản sửa lỗi do Roger Hu đóng góp

  • Đã sửa lỗi rò rỉ bộ nhớ trong nhóm sự kiện do sử dụng

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    18

    Bản sửa lỗi được đóng góp bởi Ignas Mikalajūnas

  • phụ trợ Cassandra. Không còn sử dụng

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    19 không được dùng nữa kể từ pycassa 1. 4

    Bản sửa lỗi do Jeff Terrace đóng góp

  • Đã sửa lỗi giải mã unicode có thể xảy ra khi gửi email lỗi

    Bản sửa lỗi do Seong Wun Mun đóng góp

  • Các chương trình

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    40 hiện luôn xác định
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    41 theo khuyến nghị của PEP-366

  • @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    42 hiện phát ra cảnh báo khi được sử dụng kết hợp với
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    43 ( Sự cố #581 ).

    Được đóng góp bởi Mher Movsisyan

  • @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    44 hiện chuyển tiếp các đối số từ khóa ban đầu tới
    # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    73 khi bật
    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    43

  • @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    47 hiện cố gắng thiết lập lại kết nối nếu kết nối với nhà môi giới bị mất ( Sự cố #574 ).

  • @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    47. Đã khắc phục sự cố xảy ra nếu tác vụ không có thông tin nhân viên liên quan

    Bản sửa lỗi do Matt Williamson đóng góp

  • Ngày và giờ hiện tại được lấy nhất quán từ phương thức

    @task
    def upload(request, **kwargs):
        file = request.FILES['file']
        ContactCSVModel.import_from_file(file)
        return True
    
    49 của bộ tải hiện tại

  • Hiện hiển thị thông báo lỗi hữu ích khi được cung cấp mô-đun cấu hình kết thúc bằng

    @login_required
    def upload(request):
    
                result = upload(request)
                if result:
                    messages.add_message(request, messages.SUCCESS, 'Items have been added to the database.')
            else:
    
             etc
    
    50 không thể nhập được

  • # Celery
    
    import djcelery
    djcelery.setup_loader()
    
    INSTALLED_APPS += (
        'south',
        'userena',
        'social_auth',
        'djcelery',
    
    
    )
    
    BROKER_TRANSPORT = 'sqs'
    BROKER_TRANSPORT_OPTIONS = {
        'region': 'eu-west-1',
        }
    BROKER_USER = 'xyz'
    BROKER_PASSWORD = 'zyx'
    
    87. Các đối số
    @login_required
    def upload(request):
    
                result = upload(request)
                if result:
                    messages.add_message(request, messages.SUCCESS, 'Items have been added to the database.')
            else:
    
             etc
    
    52 và
    @login_required
    def upload(request):
    
                result = upload(request)
                if result:
                    messages.add_message(request, messages.SUCCESS, 'Items have been added to the database.')
            else:
    
             etc
    
    53 cho lệnh áp dụng giờ đây có thể là một chuỗi được định dạng ISO-8601