10

私は複数のリクエストをプルしています(一度に1つずつプルしています)。次のようなものがある場合、すべて同時にプルリクエストする方法があるかどうか疑問に思っていました:

client = Instagram.client(:access_token => session[:access_token])
@user = client.user
@recent_media_items = client.user_recent_media

@lv = client.tag_recent_media('lv', options = {:count => 60})
@lv1 = client.tag_recent_media('lv1', options = {:count => 60})
@lv2 = client.tag_recent_media('lv2', options = {:count => 60})
@lv3 = client.tag_recent_media('lv3', options = {:count => 60})

それぞれlvが にリクエストを行いclientます。リクエストを完了してから次のリクエストに進むのではなく、一度に(一緒に)リクエストを実行できるようにする方法があるかどうか疑問に思っていました...

ありがとう!

4

2 に答える 2

14

はい!概念実証のために、試してください

require 'thread'

client = Instagram.client(:access_token => session[:access_token])
@user = client.user
@recent_media_items = client.user_recent_media

threads = []
threads << Thread.new { @lv = client.tag_recent_media('lv', options = {:count => 60}) }
threads << Thread.new { @lv1 = client.tag_recent_media('lv1', options = {:count => 60}) }
threads << Thread.new { @lv2 = client.tag_recent_media('lv2', options = {:count => 60}) }
threads << Thread.new { @lv3 = client.tag_recent_media('lv3', options = {:count => 60}) }
threads.each(&:join) # this waits for all the threads to finish before proceeding
puts [@lv, @lv1, @lv2, @lv3]

実際には、スレッド内でいくつかのエラー処理と再試行の設定をセットアップする必要があります。また、Instagram gem でスレッドセーフの問題が発生する場合があります。数百または数千のリクエストで大規模にこれを行っている場合は、Typhoeus のような同時 HTTP クライアントまたは EM-HTTP-Request のようなイベント HTTP クライアントを試してくださいtag_recent_mediaこれらの場合、Instagram gem にあるメソッドを手動で実装する必要があります。

于 2013-04-17T03:53:12.643 に答える
5

フォークされたプロセスで、またはプロセスの新しいスレッドとしてこれを行う spawn のような宝石があります。

バックグラウンド プロセスでのフォークとスレッドの違いは何ですか?

問題の宝石は次のとおりです: https://github.com/tra/spawnling

于 2013-04-17T03:32:50.820 に答える