GoogleAPI/Cellery(带有django/redis)-带有API调用的函数与普通函数一样工作,add.delay()要将其添加到异步任务队列,请获取SSL错误

GoogleAPI/Cellery(带有django/redis)-带有API调用的函数与普通函数一样工作,add.delay()要将其添加到异步任务队列,请获取SSL错误,django,asynchronous,redis,google-api,celery,Django,Asynchronous,Redis,Google Api,Celery,更新:我发现芹菜甚至可以与其他api调用一起工作,只是没有google api,所以我觉得google api和芹菜不兼容,或者某些设置需要更改 我的芹菜设置很好,因为它适用于像hello world这样的简单任务(在django视图中调用hello_world.delay()没有问题) 我创建了另一个更复杂的函数,它需要多次调用api来检索数据以更新数据库。只需在不使用芹菜(update_comments())的情况下调用此函数就没有问题,而且数据库会得到更新(大约需要15秒左右……这就是我想

更新:我发现芹菜甚至可以与其他api调用一起工作,只是没有google api,所以我觉得google api和芹菜不兼容,或者某些设置需要更改

我的芹菜设置很好,因为它适用于像hello world这样的简单任务(在django视图中调用hello_world.delay()没有问题)

我创建了另一个更复杂的函数,它需要多次调用api来检索数据以更新数据库。只需在不使用芹菜(update_comments())的情况下调用此函数就没有问题,而且数据库会得到更新(大约需要15秒左右……这就是我想使用芹菜的原因)。目前,该函数对api进行几十次调用以更新模型

问题是一旦我添加了.delay()使其成为芹菜任务。我得到以下错误(maxretry ssl错误)。我知道我已经为基本任务正确地设置了芹菜,因为它对于一个基本的hello world函数来说工作得很好,但对于这个包含许多api调用的更复杂的函数来说却不是这样。我不明白为什么会有这种差异,或者是否有任何设置我应该改变,因为我有一个api调用。目前只在dev上运行

任务

观点

背景

芹菜redis://127.0.0.1:6379/0"经纪运输"= “redis”芹菜\u结果\u后端=“django db”

错误

ERROR/ForkPoolWorker-4]Task todo.tasks.update_注释[d368d4eb-d149-4461-a829-e8372cb9a6a5]引发意外:ConnectionError(MaxRetryError(“HTTPSConnectionPool(host='www.googleapis.com',port=443)):url超过最大重试次数:/youtube/v3/commentThreads?part=回复%2Csnippet&allThreadsRelatedToChannelId=UC_eyncgjh2qqhhcfudwl6g&searchTerms=%23vi&maxResults=100&order=time&key=xx(由NewConnectionError(“:未能建立新连接:[Errno 60]操作超时”)引起)
回溯(最近一次呼叫最后一次):
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/connection.py”,第157行,位于康涅狄格州的新州
(self.\u dns\u主机,self.port),self.timeout,**额外\u千瓦
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/util/connection.py”,第84行,在create_connection中
提出错误
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/util/connection.py”,第74行,在create_connection中
sock.connect(sa)
TimeoutError:[Errno 60]操作超时
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urlib3/connectionpool.py”,第672行,在urlopen中
分块的,
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/connectionpool.py”,第376行,在请求中
自我验证连接(连接)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/connectionpool.py”,第994行,位于康涅狄格州
连接
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/connection.py”,第334行,在connect中
conn=自我。_new_conn()
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/connection.py”,第169行,位于康涅狄格州的新州
self,“无法建立新连接:%s”%e
urllib3.exceptions.NewConnectionError::未能建立新连接:[Errno 60]操作超时
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/requests/adapters.py”,第449行,在send中
超时=超时
urlopen中的文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urlib3/connectionpool.py”,第720行
方法,url,error=e,_pool=self,_stacktrace=sys.exc_info()[2]
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/urllib3/util/retry.py”,第436行,增量
引发MaxRetryError(_池、url、错误或响应错误(原因))
urllib3.exceptions.MaxRetryError:HTTPSConnectionPool(host='www.googleapis.com',port=443):url超过最大重试次数:/youtube/v3/commentThreads?part=represponses%2Csnippet&allThreadsRelatedToChannelId=UC_eyncgjhqhhcfudl6g&searchTerms=%23vi&maxResults=100&order=time&key=xx(由NewConnectionError引起)(':未能建立新连接:[错误号60]操作超时])
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/芹菜/app/trace.py”,第385行,在跟踪任务中
R=retval=fun(*args,**kwargs)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/芹菜/app/trace.py”,第648行,在受保护的调用中__
返回self.run(*args,**kwargs)
文件“/Users/xx/Desktop/trydjango/src/todo/tasks.py”,第49行,在更新注释中
r1=请求.get(搜索url,参数=params1)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/requests/api.py”,第75行,在get中
返回请求('get',url,params=params,**kwargs)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/requests/api.py”,请求中的第60行
return session.request(method=method,url=url,**kwargs)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/requests/sessions.py”,请求中的第533行
resp=自我发送(准备,**发送)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/requests/sessions.py”,第646行,在send中
r=适配器.send(请求,**kwargs)
文件“/Users/xx/Desktop/trydjango/lib/python3.7/site packages/requests/adapters.py”,第516行,在send中
raise ConnectionError(e,请求=请求)
requests.exceptions.ConnectionError:HTTPSConnectionPool(host='www.googleapis.com',port=443):url:/youtube/v3/commentThreads?part=represponses%2Csnippet&allthreadsratedtochannelid=UC_eyncgjh2qhhcfudwl6g&sea超过最大重试次数
    @task()
def update_comments():
    for channel in Channel.objects.all():
        search_url='https://www.googleapis.com/youtube/v3/commentThreads'
        params1={
             'part': 'replies,snippet',
             'allThreadsRelatedToChannelId': channel.channel,
              'searchTerms': '#vi',
             'maxResults': 100,
             'order': 'time',
             'key' : settings.YOUTUBE_API_DATA_KEY
        }
        params2={
             'part': 'replies,snippet',
             'allThreadsRelatedToChannelId': channel.channel,
              'searchTerms': '#faq',
             'maxResults': 100,
             'order': 'time',
             'key' : settings.YOUTUBE_API_DATA_KEY
        }
        params3={
             'part': 'replies,snippet',
             'allThreadsRelatedToChannelId': channel.channel,
              'searchTerms': '#save',
             'maxResults': 100,
             'order': 'time',
             'key' : settings.YOUTUBE_API_DATA_KEY
        }
        r1=requests.get(search_url, params=params1)
        r2=requests.get(search_url, params=params2)
        r3=requests.get(search_url, params=params3)
        rj1=r1.json()
        rj2=r2.json()
        rj3=r3.json()

        a=1
        b=1
        c=1
        for x in range(0, len(rj1['items'])):
            if a ==1:
                reply_count=rj1['items'][x]['snippet']['totalReplyCount']
                for y in range (0, reply_count):
                    if rj1['items'][x]['replies']['comments'][y]['snippet']['channelId']==channel.channel:
                        if Comments.objects.filter(question=rj1['items'][x]['snippet']['topLevelComment']['snippet']['textOriginal'], answer=rj1['items'][x]['replies']['comments'][y]['snippet']['textOriginal'], channel=channel, key="#vi").exists():
                            a=2
                            break
                        else:
                            #get out of for loop
                            new_comment=Comments(question=rj1['items'][x]['snippet']['topLevelComment']['snippet']['textOriginal'], answer=rj1['items'][x]['replies']['comments'][y]['snippet']['textOriginal'], channel=channel, key="#vi")
                            new_comment.save()
                            break
                    else:
                        continue
                    break
            else:
                break


        for x in range(0, len(rj2['items'])):
            if b == 1:
                reply_count=rj2['items'][x]['snippet']['totalReplyCount']
                for y in range (0, reply_count):
                    if rj2['items'][x]['replies']['comments'][y]['snippet']['channelId']==channel.channel:
                        if Comments.objects.filter(question=rj2['items'][x]['snippet']['topLevelComment']['snippet']['textOriginal'], answer=rj2['items'][x]['replies']['comments'][y]['snippet']['textOriginal'], channel=channel, key="#faq").exists():
                            b=2
                            break
                        else:
                            #get out of for loop
                            new_comment=Comments(question=rj2['items'][x]['snippet']['topLevelComment']['snippet']['textOriginal'], answer=rj2['items'][x]['replies']['comments'][y]['snippet']['textOriginal'], channel=channel, key="#faq")
                            new_comment.save()
                            break
                    else:
                        continue
                    break
            else:
                break


        for x in range(0, len(rj3['items'])):
            if c == 1:
                reply_count=rj3['items'][x]['snippet']['totalReplyCount']
                for y in range (0, reply_count):
                    if rj3['items'][x]['replies']['comments'][y]['snippet']['channelId']==channel.channel:
                        if Comments.objects.filter(question=rj3['items'][x]['snippet']['topLevelComment']['snippet']['textOriginal'], answer=rj3['items'][x]['replies']['comments'][y]['snippet']['textOriginal'], channel=channel, key="#save").exists():
                            c=2
                            break
                        else:
                            #get out of for loop
                            new_comment=Comments(question=rj3['items'][x]['snippet']['topLevelComment']['snippet']['textOriginal'], answer=rj3['items'][x]['replies']['comments'][y]['snippet']['textOriginal'], channel=channel, key="#save")
                            new_comment.save()
                            break
                    else:
                        continue
                    break
            else:
                break 
def tes(request):
    update_comments.delay()
 ERROR/ForkPoolWorker-4] Task todo.tasks.update_comments[d368d4eb-d149-4461-a829-e8372cb9a6a5] raised unexpected: ConnectionError(MaxRetryError("HTTPSConnectionPool(host='www.googleapis.com', port=443): Max retries exceeded with url: /youtube/v3/commentThreads?part=replies%2Csnippet&allThreadsRelatedToChannelId=UC_EyncGJh2QuQHhcfuDWL6g&searchTerms=%23vi&maxResults=100&order=time&key=xx (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x109380cd0>: Failed to establish a new connection: [Errno 60] Operation timed out'))"))
Traceback (most recent call last):
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connection.py", line 157, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/util/connection.py", line 84, in create_connection
    raise err
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/util/connection.py", line 74, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 60] Operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connectionpool.py", line 672, in urlopen
    chunked=chunked,
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connectionpool.py", line 376, in _make_request
    self._validate_conn(conn)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connectionpool.py", line 994, in _validate_conn
    conn.connect()
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connection.py", line 334, in connect
    conn = self._new_conn()
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connection.py", line 169, in _new_conn
    self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x109380cd0>: Failed to establish a new connection: [Errno 60] Operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/connectionpool.py", line 720, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/urllib3/util/retry.py", line 436, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.googleapis.com', port=443): Max retries exceeded with url: /youtube/v3/commentThreads?part=replies%2Csnippet&allThreadsRelatedToChannelId=UC_EyncGJh2QuQHhcfuDWL6g&searchTerms=%23vi&maxResults=100&order=time&key=xx (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x109380cd0>: Failed to establish a new connection: [Errno 60] Operation timed out'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/celery/app/trace.py", line 385, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/celery/app/trace.py", line 648, in __protected_call__
    return self.run(*args, **kwargs)
  File "/Users/xx/Desktop/trydjango/src/todo/tasks.py", line 49, in update_comments
    r1=requests.get(search_url, params=params1)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/Users/xx/Desktop/trydjango/lib/python3.7/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.googleapis.com', port=443): Max retries exceeded with url: /youtube/v3/commentThreads?part=replies%2Csnippet&allThreadsRelatedToChannelId=UC_EyncGJh2QuQHhcfuDWL6g&searchTerms=%23vi&maxResults=100&order=time&key=xx (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x109380cd0>: Failed to establish a new connection: [Errno 60] Operation timed out'))