From: <kt...@us...> - 2010-02-28 12:58:28
|
Revision: 3712 http://milter-manager.svn.sourceforge.net/milter-manager/?rev=3712&view=rev Author: ktou Date: 2010-02-28 12:58:20 +0000 (Sun, 28 Feb 2010) Log Message: ----------- * tool/milter-performance-check: add --n-concurrent-connections option. Modified Paths: -------------- milter-manager/trunk/ChangeLog milter-manager/trunk/tool/milter-performance-check Modified: milter-manager/trunk/ChangeLog =================================================================== --- milter-manager/trunk/ChangeLog 2010-02-28 12:32:24 UTC (rev 3711) +++ milter-manager/trunk/ChangeLog 2010-02-28 12:58:20 UTC (rev 3712) @@ -1,5 +1,7 @@ 2010-02-28 Kouhei Sutou <ko...@co...> + * tool/milter-performance-check: add --n-concurrent-connections option. + * milter/client/milter-client.c (finish_processing): fix a memory leak. * milter-manager.spec.in: support postfix_processes. Modified: milter-manager/trunk/tool/milter-performance-check =================================================================== --- milter-manager/trunk/tool/milter-performance-check 2010-02-28 12:32:24 UTC (rev 3711) +++ milter-manager/trunk/tool/milter-performance-check 2010-02-28 12:58:20 UTC (rev 3712) @@ -1,6 +1,6 @@ #!/usr/bin/env ruby # -# Copyright (C) 2008-2009 Kouhei Sutou <ko...@co...> +# Copyright (C) 2008-2010 Kouhei Sutou <ko...@cl...> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,6 +34,7 @@ @force_recipients = nil @default_recipients = ["to...@ex..."] @n_mails = 100 + @n_concurrent_connections = 10 @mails = [] @period = nil @interval = nil @@ -118,6 +119,13 @@ @n_mails = n_mails end + opts.on("--n-concurrent-connections=N", Integer, + "Send test mails with N concurrent connections", + "This option is ignored when mail files are specified", + "(#{@n_concurrent_connections})") do |n_concurrent_connections| + @n_concurrent_connections = n_concurrent_connections + end + opts.on("--period=PERIOD", "Send mail files on average in PERIOD seconds/minutes/hours", "e.g.: 5s, 5m, 1.5h and so on. Default is seconds", @@ -253,11 +261,20 @@ end def send_mails_in_parallel(mails) - mails.collect do |mail| - Thread.start do - send_mail(mail) + queue = Queue.new + mails.each do |mail| + queue.push(Proc.new {send_mail(mail)}) + end + threads = [] + @n_concurrent_connections.times do |i| + threads << Thread.new do + while (work = queue.pop) + work.call + break if queue.empty? + end end end + threads end def prepare_send_mail(mail_source_file) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |