Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 如果谷歌应用程序引擎cron-jobs有10分钟的限制,那么为什么在正常的30秒后我会得到一个死线超过了derror?_Python_Google App Engine_Cron_Timeout - Fatal编程技术网

Python 如果谷歌应用程序引擎cron-jobs有10分钟的限制,那么为什么在正常的30秒后我会得到一个死线超过了derror?

Python 如果谷歌应用程序引擎cron-jobs有10分钟的限制,那么为什么在正常的30秒后我会得到一个死线超过了derror?,python,google-app-engine,cron,timeout,Python,Google App Engine,Cron,Timeout,根据cron的说法,作业可以运行10分钟。但是,当我尝试在以管理员身份登录时转到cron作业的url来测试它时,它会超时并出现deadlineExceederRor。据我所知,这种情况大约在30秒内发生,这是请求的非cron限制。我是否需要做一些特殊的事情来测试cron规则和正常限制 以下是我正在做的: 转到cron作业的url 这将调用我的处理程序,该处理程序调用py脚本中的单个函数 此函数对google的云sql进行数据库调用,并循环遍历生成的行,在每一行上调用一个函数,使用ebay的ap

根据cron的说法,作业可以运行10分钟。但是,当我尝试在以管理员身份登录时转到cron作业的url来测试它时,它会超时并出现deadlineExceederRor。据我所知,这种情况大约在30秒内发生,这是请求的非cron限制。我是否需要做一些特殊的事情来测试cron规则和正常限制

以下是我正在做的:

  • 转到cron作业的url
  • 这将调用我的处理程序,该处理程序调用py脚本中的单个函数
  • 此函数对google的云sql进行数据库调用,并循环遍历生成的行,在每一行上调用一个函数,使用ebay的api获取一些数据
  • ebay api调用中的数据存储在一个数组中,在所有调用完成后,都将写回数据库
  • 循环完成后,它将数据写入数据库并返回给处理程序
  • 处理程序打印一条完成消息
在循环ebay api调用期间,它始终存在问题。这大约是500个api调用,必须在循环中进行

你知道我为什么没有得到10分钟的时间吗


编辑:如果您认为有帮助的话,我可以发布实际的代码,但我假设这是一个我做错的过程,而不是代码中的错误,因为如果我将查询限制为大约60个api调用,它就可以正常工作。

GAE执行cron作业的方式允许它运行10分钟。这可能已经完成了(我只是在这里猜测)通过检查用户代理、IP地址或其他方法。仅仅因为您设置了一个cron作业来点击应用程序中的URL,并不意味着来自浏览器的标准HTTP请求将允许它运行10分钟

测试作业是否有效的方法是在没有限制的本地dev服务器上进行。或者等待cron作业执行并检查日志中是否有任何错误


希望这有帮助

以下是如何澄清异常并判断它是否是urlfetch问题。如果例外情况是:

* google.appengine.runtime.DeadlineExceededError: raised if the overall request times out, typically after 60 seconds, or 10 minutes for task queue requests;
* google.appengine.runtime.apiproxy_errors.DeadlineExceededError: raised if an RPC exceeded its deadline. This is typically 5 seconds, but it is settable for some APIs using the 'deadline' option;
* google.appengine.api.urlfetch_errors.DeadlineExceededError: raised if the URLFetch times out.
那就看这是一个urlfetch问题

如果是urlfetch超时,请尝试设置更长的持续时间(例如60秒):


您没有显示日志。我希望您从API调用而不是从cron作业收到截止日期。可能您的API截止日期代码或API截止日期异常终止了您的cron作业。您好,用户,您似乎正在试图从op寻求澄清。答案不应用于寻求澄清。此外,如果直接从浏览器中的url调用cron作业,则不会将其视为cron。@jmort253抱歉,如果是url提取超时,我会告诉您该怎么做。不仅如此,我还告诉大家如何确认这是一个问题。你可能是对的,如果直接访问它,它不会被视为cron作业,但告诉op该做什么,以及如何确认出错的答案并不是答案。没有必要这么消极,@jmort253。我想到的第一件事就是混淆不同(同名)的截止日期例外;因为RPC的截止日期没有改变。很高兴OP从浏览器中点击了cron URL。@GuidovanRossum和User,虽然这仍然不是问题,但对未来的访问者可能会有所帮助。所以我做了一个编辑,这样听起来就不像是op的问题了,我扭转了否决票。希望这有帮助!谢谢,刚刚上传了它,开始时间为几分钟,它运行整个事情没有问题。出于某种原因,我认为当管理员发出请求时,可以区分常规URL和cron URL。@doeiqts:您能详细说明“几分钟内开始”的含义吗?“我和你有同样的问题。@memius对不起,我以前从来没有看到过这个。”。我的意思是,如果当前时间是1:00p,我将cron作业设置为1:05p开始,这样我就不必等待很长时间GAE开始运行它。
 result = urlfetch.fetch(url, deadline=60)