2012-03-14 3 views
0

저는 Heroku와 Cedar 스택을 사용 중이며 약 30,000 개의 다른 사진에 대해 10 개의 미리보기 이미지를 재생 중입니다.Heroku에서 여러 콘솔 프로세스를 실행하면 다른 프로세스가 느려 집니까?

각 콘솔이 1000 장의 사진을 처리 할 수 ​​있도록 각 콘솔 프로세스가 시작되므로 시간 초과 문제 (이전에는 문제가 있음)로 실행되지 않고 새로운 미리보기 이미지를 동시에 생성 할 수 있습니다. 이론적으로 전체 프로세스가 훨씬 빨라짐).

지금까지 약 12 ​​개의 콘솔 프로세스가 있으며, 각 콘솔은 Paperclip의 축소판 재생성을 실행 중입니다.

더 많은 프로세스를 추가하는 것처럼 보이지만 다른 프로세스는 느려지 기 시작합니다. 그게 사실인가요, 아니면 그냥 상상할 수 있습니까? 그리고 그들이 최고 속도로 계속 달릴 수있는 방법이 있습니까?

여기 heroku ps의 출력입니다 :

Process State  Command        
------- ---------- --------------------------------- 
run.14 up for 35m bundle exec rails console   
run.16 up for 31m bundle exec rails console   
run.18 up for 28m bundle exec rails console   
run.19 up for 27m bundle exec rails console   
run.20 up for 21m bundle exec rails console   
run.21 up for 20m bundle exec rails console   
run.22 up for 18m bundle exec rails console   
run.23 up for 8m bundle exec rails console   
run.24 up for 8m bundle exec rails console   
run.25 up for 6m bundle exec rails console   
run.26 up for 5m bundle exec rails console   
web.1 up for 3h bundle exec rails server -p $PORT 

답변

0

별도의 프로세스와 콘솔에서 그것을 실행은 별개 Heroku 측의 아무 것도 당신이 하나의 프로세스를 가졌는지 100 개를 가졌는지에 관계없이 느려질 것입니다.

그러나 모든 프로세스는 동일한 데이터를 조사하므로 병목 현상이 발생할 수 있습니다. 이 방법을 사용하면 여러 이미지에서 동일한 이미지의 크기를 조정할 위험이 있습니다. 동일한 파일을 반드시 확인하지 않아도 여러 프로세스에서 올바르게 선택하는 것은 아닙니다.

대기열을 사용하는 작업자와 일종의 대기열을 실행하는 것이 가장 이상적이지만, 생성 시간은 이와 같은 일회성 이벤트에는 실용적이지 않을 수 있습니다.

0

당신은 갈퀴 작업을 만들어야합니다.

이 방법을 사용하면 좋은 해결책입니다.

에서/lib 디렉토리/작업 파일 my_task.rake

네임 스페이스를 만들 : image_update 할

desc '....' 
    task :update => :environment do 
    User.find_in_batches(:batch_size => 100) do |user_batch| 
     for user in user_batch 
     user. ... 
     end 
    end  
    end 
end 

rake image_update:update 
+0

나는 새로운 축소판을 동시에 생성 할 수 있도록 별도의 프로세스를 부분적으로 수행하고 있습니다 ... 12 개의 프로세스가 있으면 한 번에 하나씩 12 개씩 생성 할 수 있습니다. 그래서 저는 하나의 레이크 작업이나 find_in_batches를 수행하지 않습니다. – Shpigford

+0

이 레이크 작업으로 각 개체에 대해 지연된 작업을 생성 할 수도 있습니다. 예를 들어 영웅을 사용하는 경우 직업을 갖고있는 동안 최대 인력 수를 변경합니다. 그것은 빠를 것이다;) – Antoine

관련 문제