我是erlang的新手,我有以下代码:
-module (test_srv).
-behaviour (gen_server).
-export ([start_link/0, init/1, handle_info/2]).
start_link() ->
gen_server:start_link(?MODULE, [], []).
init([]) ->
self() ! asdasd,
{ok, new_state}.
handle_info(Msg, State) ->
io:format("server got ~p , now state is ~p~n", [Msg, State]),
{noreply, State}.
我在erl shell中测试:
1> {_, P} = test_srv:start_link().
server got asdasd , now state is new_state
问题是,当服务器未初始化且未读取时向服务器发送消息时,gen_server如何处理消息?我有以下猜测:
gen_server会立即处理该消息,并将消息发送到handle_info
回调,但会在init
回调中失去初始化状态
如果没有初始化服务器,gen_server会存储消息,并在服务器初始化后发送消息。
我想知道erlang或gen_server如何处理这个问题?处理消息的原理是什么?
答案 0 :(得分:4)
我猜是import regex as re
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Spider
class myspider(Spider):
name = 'haha'
allowed_domains = ['https://blog.scrapinghub.com/']
start_urls = ['https://blog.scrapinghub.com/']
extractor = LinkExtractor(allow=allowed_domains)
def parse(self, response):
# To extract all the links on this page
links_in_page = self.extractor.extract_links(response)
for link in links_in_page:
yield scrapy.Request(link.url, callback=self.parse)
你的意思是server is not initialised
函数的其余部分正在被执行。在那种情况下,你的第二个猜测是正确的确保在 init
返回后{em}将执行<{1}}。由于handle_info
是一个单一流程,并且您已在执行init
,因此gen_server
发送给自己的邮件只会在init
之后由init
处理已完成执行。