windows下使用celery启动报错解决

12 篇文章 0 订阅
4 篇文章 0 订阅

新建tasks.py

import time
from celery import Celery

celery = Celery('tasks', broker='redis://127.0.0.1:6379/0')

@celery.task
def sendmail(mail):
    print(mail)
    print('sending mail to %s...' % mail['to'])
    time.sleep(2.0)
    print('mail sent.')
if __name__ == '__main__':
    pass
celery -A tasks worker --loglevel=info

新建发送邮件模块

from tasks import sendmail
sendmail.delay(dict(to='123@qq.com'))
sendmail.delay(dict(to='456@qq.com'))
sendmail.delay(dict(to='789@qq.com'))
if __name__ == '__main__':
    pass

运行

终端报错

[tasks]
  . tasks.sendmail

[2021-07-21 14:46:11,308: INFO/MainProcess] Connected to redis://127.0.0.1:6379/0
[2021-07-21 14:46:11,355: INFO/MainProcess] mingle: searching for neighbors
[2021-07-21 14:46:12,488: INFO/MainProcess] mingle: all alone
[2021-07-21 14:46:12,654: INFO/MainProcess] celery@pcw ready.
[2021-07-21 14:46:14,855: INFO/SpawnPoolWorker-1] child process 28608 calling self.run()
[2021-07-21 14:46:14,913: INFO/SpawnPoolWorker-2] child process 22836 calling self.run()
[2021-07-21 14:46:14,950: INFO/SpawnPoolWorker-3] child process 34684 calling self.run()
[2021-07-21 14:46:15,109: INFO/SpawnPoolWorker-5] child process 34412 calling self.run()
[2021-07-21 14:46:15,382: INFO/SpawnPoolWorker-6] child process 18312 calling self.run()
[2021-07-21 14:46:15,489: INFO/SpawnPoolWorker-4] child process 24356 calling self.run()
[2021-07-21 14:46:15,744: INFO/SpawnPoolWorker-7] child process 30688 calling self.run()
[2021-07-21 14:46:15,839: INFO/SpawnPoolWorker-8] child process 27720 calling self.run()
[2021-07-21 14:46:49,094: INFO/MainProcess] Received task: tasks.sendmail[1f06b716-85e8-40b4-95a8-3df111eaea65]
[2021-07-21 14:46:49,098: INFO/MainProcess] Received task: tasks.sendmail[35c9621d-2071-4dd1-a169-0f45c80fec50]
[2021-07-21 14:46:49,104: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')
Traceback (most recent call last):
  File "c:\program files\python37\lib\site-packages\billiard\pool.py", line 362, in workloop
    result = (True, prepare_result(fun(*args, **kwargs)))
  File "c:\program files\python37\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task
    tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)
[2021-07-21 14:46:49,105: INFO/MainProcess] Received task: tasks.sendmail[43924b24-e7d7-4b55-b5ab-fcbd9875341f]
[2021-07-21 14:46:49,112: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')
Traceback (most recent call last):
  File "c:\program files\python37\lib\site-packages\billiard\pool.py", line 362, in workloop
    result = (True, prepare_result(fun(*args, **kwargs)))
  File "c:\program files\python37\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task
    tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)
[2021-07-21 14:46:49,120: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')
Traceback (most recent call last):
  File "c:\program files\python37\lib\site-packages\billiard\pool.py", line 362, in workloop
    result = (True, prepare_result(fun(*args, **kwargs)))
  File "c:\program files\python37\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task
    tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)

解决方法

pip install eventlet

在启动celery命令增加参数 -p eventlet

celery -A tasks worker --loglevel=info -P eventlet

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Windows使用Flask启动Cel在Windows使用Flask启动Celery时,可能会遇到一些报错。以下是一些常见的解决方法: ery时,可能会遇到一些报错。以下是一些常见的解决方法: 1. 确保已正确安装Celery和Flask-Celery扩展。可以使用以下命令进行安装: ```shell pip install celery pip install Flask-Celery ```1. 确保已正确安装Celery和Flask-Celery扩展。可以使用以下命令进行安装: ```shell pip install celery pip install Flask-Celery ``` 2. 确保已正确配置Celery。在Flask应用程序的主文件中,需要进行Celery的配置,例如: ```python from flask import Flask from celery import Celery app 2. 确保已正确配置Celery。在Flask应用程序的主文件中,需要进行Celery的配置,例如: ```python = Flask(__name__) from flask import Flask app.config['from celery import CeleryCELERY_B app = FlaskROKER_URL'] = '(__name__) app.config['redis://localhostCELERY_BROKER_URL'] = 'redis://localhost:6379/0' app.config['CELERY:6379_RESULT_BACKEND'] =/0' 'app.configredis://['localhost:637CELERY_RESULT9/0_BACKEND'] =' celery 'redis://localhost:637 = Celery(app.name,9/0 broker=app.config' cel['CELeryERY_BRO = CeleryKER_URL']) (app.name,celery.conf broker=app.update(app.config.config['CELERY_BRO) ```KER_URL']) celery.conf.update(app.config) ``` 3. 确保已正确导入任务函数。在Flask应用程序中,需要导入任务函数并调用`delay()`方法来异步执行任务,例如: ```python from yourapp.tasks import send_password_reset_email @app.route('/reset_password') def reset 3. 确保已正确导入任务函数。在Flask应用程序中,需要导入任务函数并调用`delay()`方法来异步执行任务,例如: ```python _password(): # 调用from yourapp任务函数 .tasks import send send_password_password_reset_email_reset_email.delay(user) @app.route return 'Password('/reset_password') def reset reset email sent_password(): # 调用!' 任务函数 ``` send_password_reset_email.delay(user) return 'Password reset email sent 4. 确保已正确启动Celery worker。在命令行中,使用以下命令启动Celery worker: ```shell celery -A yourapp.tasks worker!' ``` --loglevel=info ``` 4. 确保已正确启动Celery worker。在命令行中,使用以下命令启动Celery worker: ```shell celery -A yourapp.tasks worker --loglevel=info ``` 如果仍然遇到报错,请提供具体的报错信息,以便更好地帮助您解决问题。 如果仍然遇到报错,请提供具体的报错信息,以便更好地帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值