gpt4 book ai didi

python - 我是一个 celery 初学者,只限于基本用法……甚至无法进入task.delay()

转载 作者:行者123 更新时间:2023-12-03 06:44:56 25 4
gpt4 key购买 nike

我试图以 flask 初学者的身份将Celery异步功能添加到我的简单 flask Web项目中。在设法安装并启动了celery,redis和相关的python pip东西之后,我从一开始就为delay()苦苦挣扎。看来我什至无法进入delay()。我很沮丧,你能帮我吗?

我的flask项目下有app.py和tasks.py。 (起初,我将所有内容都写在app.py中,然后将 celery 对象分割开了,这没有帮助)

task.py:

from celery import Celery

celery = Celery('app', broker='redis://localhost:6379/0', backend='redis://localhost:6379/1')


@celery.task
def modeling_task():
print('yes')


app.py:
@app.route('/train', methods=['GET', 'POST'])
def train():
if request.method == "GET":
return render_template('train.html')
else: # when request POST
# check if the post request has the file part
if 'file' not in request.files:
return jsonify({"code": 500, "status": 'No file is uploaded!'})

if file and allowed_file(file.filename):
print(request.files['file'].filename)
print('before task')
task = modeling_task.delay()
print('after task')

return jsonify({"code": 200, "status": 'model training', "task_id": task.id})

return 'Uploading file is wrong'

如果一切正常,则服务器收到上传文件后,控制台上的打印结果应为
Car_TEST.csv
before task
yes
after task

但是,控制台结果就是这样
 * Detected change in 'C:\\Users\\headmaster\\Desktop\\WEB\\tasks.py', reloading
* Restarting with stat
* Debugger is active!
* Debugger PIN: 308-608-393
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [22/Apr/2020 11:39:22] "GET /train HTTP/1.1" 200 -
Car_TEST.csv
before task


并且服务器卡在这里,不断地运行。

因此,似乎服务器甚至没有运行“task = modeling_task.delay()”,否则它应该在控制台上打印“yes”,对吗?

它会在另一个地方打印"is"吗?为什么卡住了?
celery report输出:
(base) C:\Users\headmaster\Desktop\WEB>celery -A tasks report

software -> celery:4.4.2 (cliffs) kombu:4.6.8 py:3.7.4
billiard:3.6.3.0 redis:3.4.1
platform -> system:Windows arch:64bit, WindowsPE
kernel version:10 imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:redis results:redis://localhost:6379/1

broker_url: 'redis://localhost:6379/0'
result_backend: 'redis://localhost:6379/1'


下面是 celery 信息:
(base) C:\Users\headmaster\Desktop\WEB>celery worker -A tasks.celery --loglevel=info

-------------- celery@LAPTOP-KLKJCK2F v4.4.2 (cliffs)
--- ***** -----
-- ******* ---- Windows-10-10.0.18362-SP0 2020-04-22 10:55:13
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: app:0x2526977ac08
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- .> results: redis://localhost:6379/1
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery


[tasks]
. tasks.modeling_task

[2020-04-22 10:55:15,501: INFO/SpawnPoolWorker-1] child process 6692 calling self.run()
[2020-04-22 10:55:15,511: INFO/SpawnPoolWorker-2] child process 17736 calling self.run()
[2020-04-22 10:55:15,518: INFO/SpawnPoolWorker-3] child process 16320 calling self.run()
[2020-04-22 10:55:15,571: INFO/SpawnPoolWorker-4] child process 5608 calling self.run()
[2020-04-22 10:55:15,972: INFO/MainProcess] Connected to redis://localhost:6379/0
[2020-04-22 10:55:20,332: INFO/MainProcess] mingle: searching for neighbors
[2020-04-22 10:55:27,369: INFO/MainProcess] mingle: all alone
[2020-04-22 10:55:35,402: INFO/MainProcess] celery@LAPTOP-KLKJCK2F ready.

Redis信息:
PS D:\Applications\Redis> redis-server redis.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.100 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 21420
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'

[21420] 22 Apr 10:38:22.506 # Server started, Redis version 3.2.100
[21420] 22 Apr 10:38:22.508 * DB loaded from disk: 0.000 seconds
[21420] 22 Apr 10:38:22.508 * The server is now ready to accept connections on port 6379
[21420] 22 Apr 10:43:23.025 * 10 changes in 300 seconds. Saving...
[21420] 22 Apr 10:43:23.030 * Background saving started by pid 6204
[21420] 22 Apr 10:43:23.231 # fork operation complete
[21420] 22 Apr 10:43:23.232 * Background saving terminated with success
[21420] 22 Apr 10:51:18.099 * 10 changes in 300 seconds. Saving...
[21420] 22 Apr 10:51:18.103 * Background saving started by pid 10116
[21420] 22 Apr 10:51:18.305 # fork operation complete
[21420] 22 Apr 10:51:18.306 * Background saving terminated with success
[21420] 22 Apr 10:56:19.022 * 10 changes in 300 seconds. Saving...
[21420] 22 Apr 10:56:19.026 * Background saving started by pid 11748
[21420] 22 Apr 10:56:19.227 # fork operation complete
[21420] 22 Apr 10:56:19.227 * Background saving terminated with success

最佳答案

因此,这有点陈旧,但希望能对您有所帮助。
基本上,flask可能会阻止该过程,并且甚至在利用此处的信息https://www.distributedpython.com/2018/08/21/celery-4-windows/时,即使在设置了fork过程的情况下,也不允许在开发环境中的Windows上执行celery函数调用/任务。
如果您有生产设置,则要移植到Windows,则可能看不到该问题。我建议在Windows的开发环境中为flask应用程序安装wsgi包装器。
创建一个名为wsgi.py的文件

from gevent.pywsgi import WSGIServer # <--- install gevent if you dont have it
from app import app # <--- flask app

http_server = WSGIServer(('', <port>), app)
http_server.serve_forever()
在Windows上使用 celery 4.4.6和Windows的 redis端口进行了测试

关于python - 我是一个 celery 初学者,只限于基本用法……甚至无法进入task.delay(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61357125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com