Python RQ属性错误:';模块';对象没有属性

Python RQ属性错误:';模块';对象没有属性,python,django,python-rq,django-rq,Python,Django,Python Rq,Django Rq,我正在尝试使用RQ创建一份背景工作: import django_rq def _send_password_reset_email_async(email): print(email)

我正在尝试使用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

\u发送\u密码\u重置\u电子邮件\u异步
封装在重置\u电子邮件功能中如何-

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'

\u发送\u密码\u重置\u电子邮件\u异步
封装在重置电子邮件功能中如何-

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'

添加注释,因为我也遇到此错误:

当您更改代码时,Django dev Web服务器会动态地重新加载,但rqworker进程不会。因此,如果您添加/修改一个任务并立即调用它,那么当新代码(您的web代码)尝试调用旧代码(RQ任务)时,您可能会遇到此错误


停止/重新启动rqworker,您就没事了。

在我也遇到此错误时添加注释:

当您更改代码时,Django dev Web服务器会动态地重新加载,但rqworker进程不会。因此,如果您添加/修改一个任务并立即调用它,那么当新代码(您的web代码)尝试调用旧代码(RQ任务)时,您可能会遇到此错误


停止/重新启动rqworker,您就可以了。

在中复制@richardbarran的注释

当您更改代码时,Rqworker不会动态重新加载,但是 如果您添加/修改任务,Django-dev-webserver将执行此操作& 立即调用它,您可能会遇到此错误作为新代码(您的 web代码)尝试调用旧代码(RQ任务)

停止/重新启动rqworker,您就没事了


复制中@richardbarran的评论

当您更改代码时,Rqworker不会动态重新加载,但是 如果您添加/修改任务,Django-dev-webserver将执行此操作& 立即调用它,您可能会遇到此错误作为新代码(您的 web代码)尝试调用旧代码(RQ任务)

停止/重新启动rqworker,您就没事了


我有一个类似的问题,并且确保在应用程序的
\uuu init\uuuuuuuuuuuuuuuuuuuy.py
中导入模块修复了这个问题。

我有一个类似的问题,并且确保在应用程序的
\uuu init\uuuuuuuuuuuuuuuuuy.py
中导入模块修复了这个问题。

,实际上,您需要做的是在某个文件中导入模块,然后对其执行延迟。
@MrE,因此无需将其导入到init.py文件中,因此,您实际需要做的是将模块导入到某个文件中,然后对其执行延迟。
@MrE,因此无需将其导入init.py文件

尝试将函数写入另一个文件,将其作为模块导入

# in my_utility.py
def send_password_reset_email_async(email):                             
    print(email)  
然后


尝试将函数写入另一个文件,将其作为模块导入

# in my_utility.py
def send_password_reset_email_async(email):                             
    print(email)  
然后


在我的例子中,我没有将任务放在tasks.py文件中…

在我的例子中,我没有将任务放在tasks.py文件中