1

RQ でバックグラウンド ジョブを作成しようとしています。

import django_rq                                                         


    def _send_password_reset_email_async(email):                             
        print(email)                                                         

    # Django admin action to send reset password emails                                                                 
    def send_password_reset_email(modeladmin, request, queryset):            
        for user in queryset:                                                
            django_rq.enqueue(_send_password_reset_email_async, user.email)  
    send_password_reset_email.short_description = 'Send password reset email'

このエラーが発生し続けますが、何かばかげたことをしているように見えますか?

Traceback (most recent call last):
  File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/worker.py", line 568, in perform_job
    rv = job.perform()
  File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/job.py", line 

495, in perform
    self._result = self.func(*self.args, **self.kwargs)
  File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/job.py", line 206, in func
    return import_attribute(self.func_name)
  File "/home/lee/Code/cas/venv/lib/python3.4/site-packages/rq/utils.py", line 151, in import_attribute
    return getattr(module, attribute)
AttributeError: 'module' object has no attribute '_send_password_reset_email_async

'

4

8 に答える 8

1

この問題は、rqworker をホームまたは別のディレクトリから実行したときに発生します。コマンド プロンプトで、python ファイルが存在するディレクトリに移動し、rqworker コマンドを実行します。

注: redis サーバーが実行されているポートに注意してください。デフォルトではない場合、つまり 6379 の場合は、rqworker の実行中にポートを指定する必要があります。 your_python_file_directory_path $ rqworker --url redis://localhost:port

于 2021-06-24T07:17:47.783 に答える
0

_send_password_reset_email_asyncをreset_email関数の中に入れてみてはいかがでしょうか-

def send_password_reset_email(modeladmin, request, queryset):  
    def _send_password_reset_email_async(email):                             
        print(email)  

    for user in queryset:                                                
        django_rq.enqueue(_send_password_reset_email_async, user.email)  

send_password_reset_email.short_description = 'Send password reset email'
于 2015-09-23T08:05:28.900 に答える
0

同様の問題が__init__.pyあり、アプリのモジュールをインポートすることで問題が解決しました。

于 2017-09-19T04:01:45.043 に答える