Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
创建n个线程并将其连接到主线程,并在ruby中监视它们的状态_Ruby_Multithreading - Fatal编程技术网

创建n个线程并将其连接到主线程,并在ruby中监视它们的状态

创建n个线程并将其连接到主线程,并在ruby中监视它们的状态,ruby,multithreading,Ruby,Multithreading,我有一个任务,现在是控制器的def。我想根据用户输入的数量创建n个线程。 如何在ruby中创建动态数量的线程,并在主线程处连接和监视它们 def validate_save upload_thread =[] @counter = 1 params.each do |param_name,param_value| if param_name.include? "file" Rails.logger.debug("making a thread")

我有一个任务,现在是控制器的def。我想根据用户输入的数量创建n个线程。 如何在ruby中创建动态数量的线程,并在主线程处连接和监视它们

def validate_save

upload_thread =[]

@counter = 1
params.each do |param_name,param_value|

    if param_name.include? "file"



        Rails.logger.debug("making a thread")
        Rails.logger.debug(@counter)
        Rails.logger.debug(param_name)
        Rails.logger.debug(param_value)
        Rails.logger.debug(param_value.original_filename)

        upload_thread << Thread.new(@counter) do
            sleep 1
            Rails.logger.debug("inside Thread:")
            Rails.logger.debug(@counter)
            if S3.upload_file(param_value)
            Rails.logger.debug('we can save into S3')
            #flash[:successful]="Successfully Uploaded :  "+params[:file].original_filename
            else
            #flash[:unsuccessful]="UnSuccessful Upload of :  "+params[:file].original_filename
            Rails.logger.debug('can not save into S3')
            end

        end

    @counter = @counter + 1
    end

end


upload_thread.each do |up_th|

    up_th.join


end
upload_-thread=[]
@计数器=1
参数。每个do |参数名称、参数值|
如果参数name.include?“文件”
调试(“生成线程”)
Rails.logger.debug(@counter)
Rails.logger.debug(参数名称)
Rails.logger.debug(参数值)
Rails.logger.debug(参数值.原始文件名)

上传内容太模糊,无法回答。你说的“监视器”是什么意思?线程应该做什么?线程的数量是如何具体地由“用户输入的数量”产生的?你可以用
threads=1000.times{Thread.new}
生成一堆线程,但答案和你的问题一样模糊。我正在使用每个线程上载一个文件,数量取决于userw.r.t浏览到我最近编辑的文件的数量,是否有一种方法可以将此任务委托给另一个类,就像我们在Java中所做的那样。为了加入它们,您可以使用
ThreadWait.all\u wait(*upload\u thread)
。至于“委托”问题,您总是可以子类化
线程
,但这在Ruby中并不常见<代码>线程.new(@counter){| counter | UploadHandler.new(counter.run}
将是我建议的方法。