{1}使用另一个具有cd1>任务池的芹菜添加了一个请求。在
我使用Django,RabbitMQ作为代理,Redis作为芹菜结果后端,celery4.1.0。在
任务有ignore_result=True
,但我经常遇到这个错误ConcurrentObjectUseError: This socket is already used by another greenlet: <bound method Waiter.switch of <gevent.hub.Waiter...>
我看这和Redis连接有关。在
我想不出怎么解决这个问题。
这或多或少就是任务的逻辑。
我也试着在调用process_task.apply_async
时使用信号量,但是没有用。在
from gevent.lock import BoundedSemaphore
sem = BoundedSemaphore(1)
@app.task(ignore_result=True, queue='request_queue')
def request_task(url, *args, **kwargs):
# make the request
req = requests.get(url)
request = {
'status_code': req.status_code,
'content': req.text,
'headers': dict(req.headers),
'encoding': req.encoding
}
with sem:
process_task.apply_async(kwargs={'url': url, 'request': request})
print(f'Done - {url}')
这是堆栈跟踪:
^{pr2}$
我不确定这是否是正确的答案,但是通过设置celeri_RESULT_BACKEND=None,我就不再看到这个错误了。在
我希望能帮上忙。在
仅供参考,此错误仅在使用gevent池时发生。我尝试过的芹菜版本:3.1、4.2.1。在
相关问题 更多 >
编程相关推荐