以下是我的代码的简化版本。运行时,文字“完成”'在“跑步”之前打印很长时间:
import scrapy
from scrapy_splash import SplashRequest
class ExtractSpider(scrapy.Spider):
name = 'extract'
start_urls = ['SomeURL']
def parse(self, response):
url_list = response.css('a.title::attr(href)').extract()
for url in url_list:
splash_args = {
'html': 1,
'png': 1,
'render_all': True,
'wait': 0.5
}
yield SplashRequest(url, self.parse_result, endpoint='render.json', args=splash_args)
print('FINISHED')
def parse_result(self, response):
print('RUNNING')
我想这与在后台运行的线程有关 - 但是想知道在进入下一个代码之前是否有办法检查函数是否已完成?例如,Print之前的某种if语句(' FINISH')?
答案 0 :(得分:0)
Scrapy使用异步代码(即请求被独立处理),因此恕我直言,没有简单的方法来实现这一点。您只能判断一个单独的请求是否已完成,是否在>>> def foo():
... for i in range(5):
... yield i
... print 'Finished'
>>>
>>> [x for x in foo()]
Finished
[0, 1, 2, 3, 4]
方法中进行(如果处理时没有错误)。
另外,作为旁注,在您的示例中,只要考虑生成器的工作方式,在 RUNNING 之后就不会打印 FINISHED 。看看最简单的例子:
function palindrome(str) {
var st='';
st=str.replace(/[^a-z0-9]/ig,"").toLowerCase();
var arr=[];
arr=st.split('');
arr=arr.reverse();
var strr='';
strr=arr.join('');
if(strr==st) {
return true;
}
return false;
}
palindrome("A man, a plan, a canal. Panama");//calling the function