Celery在OS X 10.8.5上出现WorkerLostError问题

3

我有一个使用Celery的Django应用程序。

Celery使用Rabbit作为broker。

当我在任务中使用Redis时,Celery会返回WorkerLostError错误。

启动Celery的命令:

python manage.py celeryd -BE --loglevel=INFO

代码示例:

class TestTask(Task):
    def run(self):
        rds = redis.Redis(db=0)
        rds.set('test', '11')
        val = rds.get('test')
        print val

输出:

python(1674) malloc: *** error for object 0x7fdaf125e908: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
[2013-10-05 15:40:51,012: ERROR/MainProcess] Task mysites.task_tech.TestTask[4cc3053d-4e9c-4701-97ea-4a9e7ba3e902] raised exception: WorkerLostError('Worker exited prematurely (exitcode: -6).',)
Traceback (most recent call last):
  File "/Users/user/Envs/TestEnv/lib/python2.7/site-packages/billiard/pool.py", line 930, in _join_exited_workers
    lost_ret, ))
WorkerLostError: Worker exited prematurely (exitcode: -6).

要求:

Django==1.4.1
celery==3.0.11
amqp==1.0.13
amqplib==1.0.2
billiard==2.7.3.32
celery==3.0.11
django-celery==3.0.11

Redis:

$ redis-server --version
Redis server v=2.6.14 sha=00000000:0 malloc=libc bits=64

RabbitMQ版本 - 3.1.4

OSX版本 - 10.8.5

为什么会出现WorkerLostError?有什么想法吗?

更新: 在Debian、Ubuntu和一些其他Linux系统上,我没有这个问题。问题只存在于OSX上。


Python中的malloc错误很可能是编译好的.so文件与Python版本不对齐造成的冲突。你最近升级了Python但没有刷新包吗? - Nino Walker
1个回答

0

太棒了!

我在同一个文件中有另一个任务,它使用了我的自定义方法init。我不知道为什么,但重命名类init(或删除)解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接