AttributeError的:'模块'对象没有属性' monkey_patch'

时间:2014-08-04 18:41:25

标签: python-2.7 concurrency celery eventlet

我想在python中使用celery使用并发。 我有一个tasks.py文件,它是一个使用BeautifulSoup的网络爬虫。 我所做的进口是:

from celery import Celery
import eventlet
app = Celery('tasks', backend='amqp', broker='amqp://')

对于芹菜工人,我使用的是这个命令:

celery -A tasks worker --loglevel=info --pool=eventlet -c 1000

错误:

mayank@mayank-Studio-1558:~/cognite/test$ celery -A tasks worker --loglevel=info --         pool=eventlet -c 1000
Traceback (most recent call last):
File "/usr/local/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 28, in main
maybe_patch_concurrency()
File "/usr/local/lib/python2.7/dist-packages/celery/__init__.py", line 124, in maybe_patch_concurrency
patcher()
File "/usr/local/lib/python2.7/dist-packages/celery/__init__.py", line 89, in _patch_eventlet
  eventlet.monkey_patch()
AttributeError: 'module' object has no attribute 'monkey_patch'

我想使用1000个线程执行任务。 我尝试导入eventlet,然后执行:

eventlet.monkey_patch(socket=True, select=True)
eventlet.import_patched('monkey_patch')

仍然没有工作和相同的错误。

如果有人可以提供帮助,那就太好了。 感谢。

3 个答案:

答案 0 :(得分:2)

由于eventlet安装,此错误即将发生。 以前我用过pip install eventlet, 但 sudo apt-get install eventlet 为我工作,解决了 monkey_patch 依赖关系。

答案 1 :(得分:1)

我刚遇到这个问题,对我来说,问题是我的系统中没有python开发头。当我试图通过pip安装eventlet时,我收到了这个错误:

In file included from greenlet.c:5:0:

greenlet.h:8:20: fatal error: Python.h: No such file or directory

 #include <Python.h>

                    ^

compilation terminated.

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

但是它说无论如何都安装了eventlet,除了我在尝试使用它时遇到了同样的错误。所以如何在我的情况下解决它是:

pip uninstall eventlet
apt-get install python-dev (For Ubuntu, use your distros package manager)
pip install eventlet

希望它有所帮助。

答案 2 :(得分:0)

最有可能的原因是您eventlet.py中的某个位置eventlet.pycsys.path,可能在您的项目树中。

试试这个:

from __future__ import absolute_import
from celery import Celery
import eventlet
app = Celery('tasks', backend='amqp', broker='amqp://')