小编ctp*_*ctp的帖子

Erlang - 进程太多了

这是我在Erlang中的第一步,很抱歉这个新手问题:)我正在为每个Redis请求产生一个新的Erlang进程,这不是我想要的(32k Erlang进程中的"太多进程")但是如何限制例如最大的过程量 16?

-module(queue_manager).
-export([add_ids/0, add_id/2]).

add_ids() ->
    {ok, Client} = eredis:start_link(),
    do_spawn(Client, lists:seq(1,100000)).

do_spawn(Client, [H|T]) ->
    Pid = spawn(?MODULE, add_id, [Client, H]),
    do_spawn(Client, T);

do_spawn(_, []) -> none.

add_id(C, Id) ->
    {ok, _} = eredis:q(C, ["SADD", "todo_queue", Id]).
Run Code Online (Sandbox Code Playgroud)

concurrency erlang exception process

3
推荐指数
1
解决办法
2019
查看次数

Erlang中的并行HTTP Web爬虫

我在一个简单的网络爬虫编码,并生成了一堆gf静态文件,我试图通过底部的代码抓取.我有两个问题/问题,我不知道:

1.)循环序列1..200 在抓取100页后完全抛出错误:

** exception error: no match of right hand side value {error,socket_closed_remotely}
     in function  erlang_test_01:fetch_page/1 (erlang_test_01.erl, line 11)
     in call from lists:foreach/2 (lists.erl, line 1262)
Run Code Online (Sandbox Code Playgroud)

2.)如何并行化请求,例如20个cincurrent reqs

-module(erlang_test_01).
-export([start/0]).

-define(BASE_URL, "http://46.4.117.69/").

to_url(Id) ->
  ?BASE_URL ++ io_lib:format("~p", [Id]).

fetch_page(Id) ->
  Uri = to_url(Id),
  {ok, {{_, Status, _}, _, Data}} = httpc:request(get, {Uri, []}, [], [{body_format,binary}]),
  Status,
  Data.

start() ->
  inets:start(),
  lists:foreach(fun(I) -> fetch_page(I) end, lists:seq(1, 200)). 
Run Code Online (Sandbox Code Playgroud)

erlang http

2
推荐指数
1
解决办法
893
查看次数

如何在Plone中注入模板代码?

我的目标是在每篇 Plone文章(页面标题和第一段)之间注入一些HTML代码?我正在运行Plone 4.有没有人对如何实现这一点有所暗示?

另一个问题是:是否可以在每篇Plone文章中随机放置一些HTML代码?

html python templates zope plone

1
推荐指数
1
解决办法
640
查看次数

Ruby EventMachine和函数

我正在使用合适的Redis EM gem(在我的情况下是'em-hiredis')在EventMachine反应器循环中读取Redis集,并且必须检查一些Redis集是否包含级联中的成员.我的目标是获取非空的集合的名称:

require 'eventmachine'
require 'em-hiredis'

def fetch_queue
  @redis.scard('todo').callback do |scard_todo|
    if scard_todo.zero?
      @redis.scard('failed_1').callback do |scard_failed_1|
        if scard_failed_1.zero?
          @redis.scard('failed_2').callback do |scard_failed_2|
            if scard_failed_2.zero?
              @redis.scard('failed_3').callback do |scard_failed_3|
                if scard_failed_3.zero?
                  EM.stop
                else
                  queue = 'failed_3'
                end 
              end 
            else
              queue = 'failed_2'
            end 
          end 
        else
          queue = 'failed_1'
        end 
      end 
    else
      queue = 'todo'
    end 
  end 
end

EM.run do
  @redis = EM::Hiredis.connect "redis://#{HOST}:#{PORT}"

  # How to get the value of fetch_queue?
  foo = fetch_queue
  puts foo
end
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何告诉EM在'fetch_queue'中返回'queue'的值,以便在reactor循环中使用它?fetch_queue中的简单"return queue ='todo'","return queue ='failed_1'"等会导致"意外返回(LocalJumpError)"错误消息.

ruby eventmachine redis

1
推荐指数
1
解决办法
671
查看次数

标签 统计

erlang ×2

concurrency ×1

eventmachine ×1

exception ×1

html ×1

http ×1

plone ×1

process ×1

python ×1

redis ×1

ruby ×1

templates ×1

zope ×1