Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何(几乎)同时启动两个线程?_Ruby_Multithreading - Fatal编程技术网

Ruby 如何(几乎)同时启动两个线程?

Ruby 如何(几乎)同时启动两个线程?,ruby,multithreading,Ruby,Multithreading,我在鲁弗斯有个街区 def download(log_message) $logger.info(log_message) download_all_from_config() end scheduler.in '5s' do first = Thread.new(download("starting cron job (in 5s mode)")) sleep(55) second = Thread.new(download("starting 2nd cron job

我在鲁弗斯有个街区

def download(log_message)
  $logger.info(log_message)
  download_all_from_config()
end

scheduler.in '5s' do
  first = Thread.new(download("starting cron job (in 5s mode)"))
  sleep(55)
  second = Thread.new(download("starting 2nd cron job (in 5s mode)"))
  first.join
  second.join
end
我想要的是几乎同时运行两次download_all_from_config()函数。这个功能是下载大文件,所以我不想等到第一个完成。我想我会使用线程,但我不能让它工作


有人能建议如何从_config()两次运行下载_all _,以便它几乎同时启动吗?

您需要使用块调用Thread.new。i、 而不是
线程。新建(…)
您需要

Thread.new { ... }


您需要使用块调用
Thread.new
。这只是你问题中的一个输入错误吗?@matt:不,不是输入错误。但是它开始了第一个线程。是否要根据您的评论创建答案,以便我可以接受?@Radek您只是将
download
的返回值传递给
线程
构造函数。换句话说,您没有并行运行对
download
的两个调用。因此,第二次下载将在第一次下载完成后开始?嗯,那么如果Thread.new{}是正确的语法,Thread.new()为什么不会抛出错误?@Radek
Thread.new()
确实会为我抛出错误。我以为这就是你说没用时看到的。你使用的是什么版本的Ruby?@Radek这就可以解释了。在Ruby尝试初始化线程之前,将对
download
的第一个调用进行评估(并运行到完成),此时将抛出异常。
Thread.new do
  ...
end