Параллельный запуск скриптов Ruby

Допустим, у меня есть два скрипта на Ruby - a.rb и b.rb. Оба являются веб-парсерами, используемыми для разных страниц. Они могут работать много-много часов, и я хотел бы запускать их одновременно. Для этого я попытался запустить их третьим скриптом, используя драгоценный камень обещания со следующим кодом:

def method_1
require 'path to my file\a'
end
def method_2
require 'path to my file\b'
end
require 'future'
x=future{method_1}
y=future{method_2}
x+y

Однако это решение вызывает ошибку (см. Ниже) и выполняется только один сценарий.

An operation was attempted on something that is not a socket. 
(Errno::ENOTSOCK)

Я также пробовал поиграть с классом Thread:

def method_one
require 'path to my file\a'
end

def method_two
require 'path to my file\b'
end

x = Thread.new{method_one}
y = Thread.new{method_two}

x.join
y.join

И это дает мне ту же ошибку, что и для драгоценного камня обещания.

Я также запускал эти сценарии в отдельных оболочках - тогда они работают одновременно, но производительность намного хуже (примерно на 50% медленнее). Есть ли способ запустить их одновременно и сохранить высокую производительность?

Если вы открыты для альтернативных технологий. В этом случае Go & Goroutines были бы потрясающими. Ruby - не лучший язык для параллелизма, поэтому он не идеален для парсеров.

Ben Toogood 14.09.2018 16:21

При замене require 'path to my file \{a,b}' на puts __method__ вариант Нить у меня работает нормально. Это говорит о том, что исключение возникает внутри оператора требовать.

3limin4t0r 14.09.2018 18:09

@JohanWentholt Не могли бы вы уточнить, что мне делать? Поскольку ваше решение не указывает на мои файлы - a.rb или b.rb

MartinKitty 15.09.2018 21:40
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
3
93
0

Другие вопросы по теме