如何解决Django Celery无法在任务内部查询postgres db
在我的芹菜任务中,我尝试查询我的postgres数据库。但是我总是得到以下错误:
task.py
@shared_task(bind=True)
def ImportFiles(self,activity_file_list,user_id_list,activityfile_id,file_type_list):
print('Task ImportFiles started')
myuser = User.objects.get(pk=user_id_list[0])
print("USER:")
print(myuser)
settings.py
INSTALLED_APPS = [
...
'celery',...
]
...
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis','NAME': 'geodjango','USER': 'postgres','PASSWORD': 'postgres',},}
...
CELERY_broKER_URL = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
celery.py
# Default settings from celery tutorial:
from __future__ import absolute_import,unicode_literals
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE','geodjango.settings')
app = Celery('geodjango',broker='redis://localhost')
app.config_from_object('django.conf:settings',namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
以下简单方案适用:
如果我更改task.py并执行一个简单的for循环。
task.py
@shared_task(bind=True)
def ImportFiles(self,file_type_list):
print('Task ImportFiles started')
progress_recorder = ProgressRecorder(self)
result = 0
seconds = 10
for i in range(seconds):
print("for: " + str(i))
time.sleep(1)
result += i
progress_recorder.set_progress(i + 1,seconds,description="Downloading")
print("FOR LOOP FINISHED")
return 'Task Complete'
芹菜输出:
因此,看来celery正在运行,但是以某种方式我无法对我的postgres数据库进行查询。我目前正在Windows机器上进行开发...有人可以帮助我吗?
编辑:我用以下命令行开始celery:
celery -A geodjango.celery worker --loglevel=info --pool=eventlet
解决方法
我找到了Windows的解决方案: 我用以下命令启动芹菜:
struct TestView: View {
var body: some View {
VStack {
ForEach(0...10,id: \.self) { i in
Color.gray.frame(height: 0.5)
Text("\(i)")
}
}
}
}
如果我将pool更改为solo,问题似乎是--pool = eventlet->。 以下命令现已生效,我可以进行postgres查询。
celery -A geodjango.celery worker --loglevel=info --pool=eventlet
我不是专家,我想我在教程中看到--pool = eventlet,所以我使用了它。但是使用--pool = solo可以正常工作。
在这里,我找到了有关不同池选项的文章,也许它对其他人也有帮助:https://www.distributedpython.com/2018/10/26/celery-execution-pool/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。