cython 编译的 celely run 失败 [属性错误:'method-wrapper'对象没有属性"__module__"]



我用python中的celener开发了一个项目,并使用cython编译pyd文件,每个文件都很好,但tasks.pyd无法运行。我想这个bug可能与@decator有关,我尝试了一些没有解决方案的方法,谁能帮我?首先谢谢。

这是我在tasks.py 中的代码

from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
@app.task
def myTaskFunc(arg1=None, arg2=None):
some code

Traceback (most recent call last):
File "c:usersen-18appdatalocalprogramspythonpython36librunpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:usersen-18appdatalocalprogramspythonpython36librunpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:Usersen-18AppDataLocalProgramsPythonPython36Scriptscelery.exe__main__.py", line 9, in <module>
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelery__main__.py", line 16, in main
_main()
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybincelery.py", line 322, in main
cmd.execute_from_commandline(argv)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybincelery.py", line 495, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybinbase.py", line 305, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybincelery.py", line 487, in handle_argv
return self.execute(command, argv)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybincelery.py", line 419, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybinworker.py", line 223, in run_from_argv
return self(*args, **options)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybinbase.py", line 253, in __call__
ret = self.run(*args, **kwargs)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelerybinworker.py", line 258, in run
**kwargs)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryworkerworker.py", line 97, in __init__
self.on_before_init(**kwargs)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryappsworker.py", line 93, in on_before_init
trace.setup_worker_optimizations(self.app, self.hostname)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryapptrace.py", line 596, in setup_worker_optimizations
app.finalize()
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryappbase.py", line 538, in finalize
_announce_app_finalized(self)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagescelery_state.py", line 54, in _announce_app_finalized
callback(app)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryappbase.py", line 411, in cons
return app._task_from_fun(fun, **opts)
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryappbase.py", line 452, in _task_from_fun
'__header__': staticmethod(head_from_fun(fun, bound=bind)),
File "c:usersen-18appdatalocalprogramspythonpython36libsite-packagesceleryutilsfunctional.py", line 279, in head_from_fun
namespace = {'__name__': fun.__module__}
AttributeError: 'method-wrapper' object has no attribute '__module__'
comtypes        > Calling CoUnititialize()
comtypes        > CoUnititialize() done.

如果没有一个最小的可复制示例,就不可能知道,所以下面是一个猜测。

我怀疑@app.task要求函数具有Cython默认情况下不提供的某些内省属性。尝试的东西:

  1. 使用指令#cython: binding=True。这使得Cython函数成为一种行为更像常规函数的自定义对象类型
  2. 使用Cython 3 alpha(尽管谁知道你在这里使用的是什么版本的Cython,因为你没有说(。它包含一些对功能内省的改进(默认情况下启用binding=True(
  3. 用Python编写这段代码(例如,可以使用exec(

最新更新