Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何像信号灯一样设置队列?_Python_Google App Engine - Fatal编程技术网

Python 如何像信号灯一样设置队列?

Python 如何像信号灯一样设置队列?,python,google-app-engine,Python,Google App Engine,我在我的应用程序中设置了四个队列 queue: - name: tasks-stage-0 rate: 475/s retry_parameters: task_retry_limit: 5 min_backoff_seconds: 5 max_backoff_seconds: 100 max_doublings: 5 bucket_size: 100 - name: tasks-stage-1 rate: 475/s retry_param

我在我的应用程序中设置了四个队列

queue:
- name: tasks-stage-0
  rate: 475/s
  retry_parameters:
    task_retry_limit: 5
    min_backoff_seconds: 5
    max_backoff_seconds: 100
    max_doublings: 5
  bucket_size: 100

- name: tasks-stage-1
  rate: 475/s
  retry_parameters:
    task_retry_limit: 5
    min_backoff_seconds: 5
    max_backoff_seconds: 100
    max_doublings: 5
  bucket_size: 100

- name: tasks-stage-2     <------- !!!!
  rate: 4/s
  retry_parameters:
    task_retry_limit: 5
    min_backoff_seconds: 5
    max_backoff_seconds: 100
    max_doublings: 5
  bucket_size: 100

- name: tasks-stage-3
  rate: 475/s
  retry_parameters:
    task_retry_limit: 5
    min_backoff_seconds: 5
    max_backoff_seconds: 100
    max_doublings: 5
  bucket_size: 100
是不是因为我每秒点击API超过4次?我的设置正确吗?或者为什么我会收到这些超过截止日期的错误

更新:

taskqueue.Task(url='/worker/stage-2', headers=header, payload=json.dumps({'news_url_string':news.key.urlsafe()})).add(queue_name='tasks-stage-2')
Exception on /worker/stage-2 [POST]
Traceback (most recent call last):
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask_restful/__init__.py", line 263, in error_router
    return original_handler(e)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/views.py", line 149, in dispatch_request
    return meth(*args, **kwargs)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/news/worker/stage2.py", line 16, in post
    OpenCalais.generate_tags_for_news(news_url_string)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/news/opencalais/opencalais.py", line 31, in generate_tags_for_news
    response.raise_for_status()
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/requests/models.py", line 831, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
HTTPError: 500 Server Error: Internal Server Error
更新2:

taskqueue.Task(url='/worker/stage-2', headers=header, payload=json.dumps({'news_url_string':news.key.urlsafe()})).add(queue_name='tasks-stage-2')
Exception on /worker/stage-2 [POST]
Traceback (most recent call last):
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask_restful/__init__.py", line 263, in error_router
    return original_handler(e)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/flask/views.py", line 149, in dispatch_request
    return meth(*args, **kwargs)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/news/worker/stage2.py", line 16, in post
    OpenCalais.generate_tags_for_news(news_url_string)
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/news/opencalais/opencalais.py", line 31, in generate_tags_for_news
    response.raise_for_status()
  File "/base/data/home/apps/s~news-prod/1-0-10.382350631067599473/lib/requests/models.py", line 831, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
HTTPError: 500 Server Error: Internal Server Error

队列的配置似乎有点不正确(请参阅底部的参考资料,以更好地了解每个值的作用)

参考资料:

  • 最好的解释是:

您收到的错误消息似乎并不意味着您达到了API限制(这是一个超时,而不是429)。您可以尝试进一步降低速率,看看这是否能解决问题,但我也会调查API响应时间。您有一个很好的观点。感谢您分享
429
错误消息。但我一直收到
403
错误。但并非总是如此,我想知道原因是什么。我也不明白为什么在出现异常后任务没有重试。这不是任务的本质吗?也许为了安全起见,我应该将其减少到每秒3次调用,并将bucket也减少到3次。重试不仅在队列中配置,而且在您将任务排队时,您是否介意发布一个关于如何执行此操作的片段?另一个有趣的配置是max_并发请求。您可以在这里查看更多信息:谢谢您的帮助。现在,我添加了一个代码片段,说明如何按照您的要求调用任务。看起来您正在添加tasks-stage-3而不是2。。。是吗?但这仍然不能回答重试问题。在这方面的配置似乎是好的,我有类似的工作没有麻烦。日志没有告诉你重试的情况吗?(寻找像
将重试slice###############-#0这样的东西,这两次。
)这个链接非常有用。但我仍然认为速率
1/s
可能是错误的。最初,桶中有4个令牌。每个任务获取一个令牌,直到bucket为空。这几乎是即时的。然后,如果我们每秒只向桶中注入1个令牌,则速率将从每秒4个降低到每秒1个。因为从来没有足够的代币可以每秒执行4次。因此,我认为
rate:4/s
+
bucket\u size:4
max\u并发请求:4
应该更有效。你不觉得吗?你是对的。。。我更新了答案,并在iThanks上添加了一个指向维基百科解释的链接,看起来很不错。最后一个问题是重试。我添加了我在任务中遇到的异常。并且没有重试。非常奇怪。再来一次:你检查任务是否重新排队了吗?(可能由于时间配置,您没有看到它重试,但它已排队等待重试)。我还将尝试删除回退配置以测试这一点