我正在使用VSCode进行Web开发,使用框架Django。调试Django没有问题,但是当我尝试使用Celery时-调试器不会在断点处停止。我使用此配置运行Celery和Celery Beat:
{
"name": "Beat",
"type": "python",
"request": "launch",
"pythonPath": "/home/MyName/job/MyProject/venv/bin/python",
"program": "/home/MyName/job/MyProject/venv/bin/celery",
"console": "integratedTerminal",
"args": [
"-A",
"bgp",
"beat",
"-l",
"info"
]
},
{
"name": "Celery",
"type": "python",
"request": "launch",
"pythonPath": "/home/MyName/job/MyProject/venv/bin/python",
"program": "/home/MyName/job/MyProject/venv/bin/celery",
"console": "integratedTerminal",
"args": [
"-A",
"bgp",
"worker",
"-l",
"info",
"-Q",
"ssh",
"--concurrency=1",
]
},
当我运行Celery时,我得到了这个回溯:
[2018-11-29 13:18:34,112: CRITICAL/MainProcess] Unrecoverable error: RuntimeError('already started',)
Traceback (most recent call last):
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/worker/worker.py", line 205, in start
self.blueprint.start(self)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/bootsteps.py", line 119, in start
step.start(parent)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/bootsteps.py", line 369, in start
return self.obj.start()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/concurrency/base.py", line 131, in start
self.on_start()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/concurrency/prefork.py", line 112, in on_start
**self.options)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/concurrency/asynpool.py", line 432, in __init__
super(AsynPool, self).__init__(processes, *args, **kwargs)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/billiard/pool.py", line 1007, in __init__
self._create_worker_process(i)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/concurrency/asynpool.py", line 449, in _create_worker_process
return super(AsynPool, self)._create_worker_process(i)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/billiard/pool.py", line 1116, in _create_worker_process
w.start()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/billiard/process.py", line 124, in start
self._popen = self._Popen(self)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/billiard/context.py", line 333, in _Popen
return Popen(process_obj)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/billiard/popen_fork.py", line 24, in __init__
self._launch(process_obj)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/billiard/popen_fork.py", line 72, in _launch
self.pid = os.fork()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/_vendored/pydevd/_pydev_bundle/pydev_monkey.py", line 488, in new_fork
_on_forked_process()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/_vendored/pydevd/_pydev_bundle/pydev_monkey.py", line 56, in _on_forked_process
pydevd.settrace_forked()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/_vendored/pydevd/pydevd.py", line 1723, in settrace_forked
patch_multiprocessing=True,
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/_vendored/pydevd/pydevd.py", line 1488, in settrace
stop_at_frame,
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/_vendored/pydevd/pydevd.py", line 1536, in _locked_settrace
debugger.connect(host, port) # Note: connect can raise error.
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/_vendored/pydevd/pydevd.py", line 484, in connect
s = start_client(host, port)
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/pydevd_hooks.py", line 125, in <lambda>
_start_client = (lambda h, p: start_client(daemon, h, p))
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/pydevd_hooks.py", line 71, in start_client
sock, start_session = daemon.start_client((host, port))
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/daemon.py", line 208, in start_client
with self.started():
File "/usr/local/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/daemon.py", line 109, in started
self.start()
File "/home/MyName/job/MyProject/venv/lib/python2.7/site-packages/ptvsd/daemon.py", line 144, in start
raise RuntimeError('already started')
RuntimeError: already started
[2018-11-29 13:18:34,158: INFO/MainProcess] Connected to amqp://project:**@127.0.0.1:5672/project
[2018-11-29 13:18:34,210: INFO/MainProcess] mingle: searching for neighbors
[2018-11-29 13:18:35,292: INFO/MainProcess] mingle: all alone
[2018-11-29 13:18:35,353: WARNING/MainProcess] /home/MyName/job/MyProject/venv/lib/python2.7/site-packages/celery/fixups/django.py:200: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2018-11-29 13:18:35,354: INFO/MainProcess] celery@MyName-vm ready..
Celery运行的很好,但是当我在任何任务中设置断点时,Celery线程都不能在断点处停止。我该怎么解决这个问题呢?
我的celery 版本:celery [红]==4.2.0
4条答案
按热度按时间jpfvwuh41#
您可以尝试将“-P solo”添加到Celery配置的参数中。
这是我的Celery配置。它对我来说工作正常。
ncecgwcz2#
这是我的配置,工作正常。
}
ckx4rj1h3#
我找到了一种在VS代码中使用debugpy的方法,可以获得比Celery pdb更好的调试体验。我使用docker-compose,但即使你不使用,你也可以使用这个想法。
所以先用Debugpy做celery
下面是launch.json
就是这样,享受调试吧!您可以像往常一样设置断点和计算变量。x1c 0d1x
我有一个post关于这个更多
new9mtju4#
在我不想安装额外的调试器的情况下,这些答案都不起作用。另外,在参数中放置“-P solo”也不是必须的,正如其中一个答案所指出的那样。以下是对我起作用的配置
只有两件事需要处理
1.cwd或当前工作目录应该和你在终端运行celery的目录是同一个文件夹,在我的例子中,clickserver是django文件夹,其中包含celery.py,所以我将在这个文件夹上面运行它
1.PYTHONPATH应与cwd位于同一文件夹。
它应该可以无缝工作