Mercurial > repos > fgiacomoni > massbank_ws_searchspectrum
comparison lib/threader.pm @ 0:023c380900ef draft default tip
Init repository with last massbank_ws_searchspectrum master version
author | fgiacomoni |
---|---|
date | Wed, 19 Apr 2017 11:31:58 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:023c380900ef |
---|---|
1 package lib::threader ; | |
2 | |
3 use strict; | |
4 use warnings ; | |
5 use Exporter ; | |
6 use Carp ; | |
7 use threads; | |
8 use threads::shared; | |
9 use Thread::Queue; | |
10 use diagnostics ; | |
11 use Data::Dumper ; | |
12 use Carp qw (cluck croak carp) ; | |
13 use LWP::UserAgent; | |
14 use LWP::Simple ; ## Lib de protocole HTTP de download | |
15 use SOAP::Lite + trace => qw(fault); ## SOAP for web service version 0.67 | |
16 import SOAP::Data qw(name); | |
17 | |
18 use Data::Dumper ; | |
19 | |
20 use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS); | |
21 | |
22 our $VERSION = "1.0"; | |
23 our @ISA = qw(Exporter); | |
24 our @EXPORT = qw(threading_getRecordInfo); | |
25 our %EXPORT_TAGS = ( ALL => [qw(threading_getRecordInfo )] ); | |
26 | |
27 =head1 NAME | |
28 | |
29 My::Module - An example module | |
30 | |
31 =head1 SYNOPSIS | |
32 | |
33 use My::Module; | |
34 my $object = My::Module->new(); | |
35 print $object->as_string; | |
36 | |
37 =head1 DESCRIPTION | |
38 | |
39 This module does not really exist, it | |
40 was made for the sole purpose of | |
41 demonstrating how POD works. | |
42 | |
43 =head1 METHODS | |
44 | |
45 Methods are : | |
46 | |
47 =head2 METHOD new | |
48 | |
49 ## Description : new | |
50 ## Input : $self | |
51 ## Ouput : bless $self ; | |
52 ## Usage : new() ; | |
53 | |
54 =cut | |
55 | |
56 sub new { | |
57 ## Variables | |
58 my $self={}; | |
59 bless($self) ; | |
60 return $self ; | |
61 } | |
62 ### END of SUB | |
63 | |
64 =head2 METHOD searchSpectrumWorker | |
65 | |
66 ## Description : work with searchSpectrum method in threading mode | |
67 ## Input : $Qworks | |
68 ## Output : $results | |
69 ## Usage : my ( $results ) = searchSpectrumWorker( $Qworks ) ; | |
70 | |
71 =cut | |
72 ## START of SUB | |
73 sub searchSpectrumWorker { | |
74 my $self = shift; | |
75 my ($Qworks, $server, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) = @_ ; | |
76 my @results = () ; | |
77 my @fake = () ; | |
78 | |
79 my $omassbank = lib::massbank_api->new() ; | |
80 my $soap = $omassbank->selectMassBank($server) ; | |
81 | |
82 while(my $pcgroup = $Qworks->dequeue) { | |
83 # print Dumper $pcgroup ; | |
84 my $oquery= lib::massbank_api->new() ; | |
85 my ($result, $num) = eval{$oquery->searchSpectrum($soap, $pcgroup->{'id'}, $pcgroup->{'mzmed'}, $pcgroup->{'into'}, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) ; } or die; | |
86 # print "The query send to massbank return $num entries...\n" ; | |
87 # print Dumper $result ; | |
88 | |
89 if (!defined $num) { $num = 0 ; } | |
90 if ($num >= 0 ) { | |
91 push @results, $result ; | |
92 } | |
93 else { | |
94 push @fake, $pcgroup ; | |
95 } | |
96 } | |
97 return (@results) ; | |
98 } | |
99 ## END of SUB | |
100 | |
101 | |
102 =head2 METHOD threading_getRecordInfo | |
103 | |
104 ## Description : prepare parallel threads - DEPRECATED | |
105 ## Input : $soap, $list | |
106 ## Output : $results | |
107 ## Usage : my ( $results ) = threading_getRecordInfo( $soap, $list ) ; | |
108 | |
109 =cut | |
110 ## START of SUB | |
111 sub threading_getRecordInfo { | |
112 ## Retrieve Values | |
113 my $self = shift ; | |
114 my ( $osoap, $list ) = @_ ; | |
115 | |
116 my @results = () ; | |
117 my $i = 0 ; # position in the ids list | |
118 | |
119 if ( ( defined $list ) ) { | |
120 | |
121 my $oquery = lib::massbank_api->new() ; | |
122 | |
123 for (my $i = 0; $i < (scalar @{$list}); $i++ ) { | |
124 my $thr = threads->create( sub { $oquery->getRecordInfo($osoap, $list->[$i]) } ) ; | |
125 push ( @results, $thr->join ) if $list->[$i] ; | |
126 } | |
127 } | |
128 else { | |
129 warn "Your input list of ids is undefined\n" ; | |
130 } | |
131 return(\@results) ; | |
132 } | |
133 ## END of SUB | |
134 | |
135 | |
136 =head2 METHOD threading_searchSpectrum | |
137 | |
138 ## Description : prepare parallel threads - DEPRECATED | |
139 ## Input : $soap, | |
140 ## Output : $results | |
141 ## Usage : my ( $results ) = threading_searchSpectrum( $soap, ) ; | |
142 | |
143 =cut | |
144 ## START of SUB | |
145 sub threading_searchSpectrum { | |
146 | |
147 ## http://www.perlmonks.org/?node_id=735923 | |
148 ## http://www.nntp.perl.org/group/perl.ithreads/2003/05/msg696.html | |
149 ## http://stackoverflow.com/questions/15222480/web-service-using-perl-wsdl-and-multi-threading-does-not-working | |
150 ## Retrieve Values | |
151 my $self = shift ; | |
152 my ( $osoap, $pcgroup_list, $pcgroups, $ion_mode, $instruments, $max, $unit, $tol, $cutoff ) = @_ ; | |
153 | |
154 my @results = () ; | |
155 my $n = 6 ; # position in the ids list | |
156 | |
157 if ( ( defined $pcgroups ) ) { | |
158 | |
159 print Dumper $pcgroups ; | |
160 | |
161 my $oquery = lib::massbank_api->new() ; | |
162 | |
163 foreach my $pc (@{$pcgroup_list}) { | |
164 | |
165 print "\t---> Create a thread for pcgroup n-$pc\n" ; | |
166 | |
167 my $thr = threads->create( | |
168 sub { | |
169 $oquery->searchSpectrum($osoap, $pcgroups->{$pc}{'mzmed'}, $pcgroups->{$pc}{'into'}, $ion_mode, $instruments, $max, $unit, $tol, $cutoff) ; | |
170 } | |
171 ) ; | |
172 push ( @results, $thr->join ) ; | |
173 } ## end foreach | |
174 } | |
175 else { | |
176 warn "Your input list of ids is undefined\n" ; | |
177 } | |
178 return(\@results) ; | |
179 } | |
180 ## END of SUB | |
181 | |
182 | |
183 =head2 METHOD thread_and_queue_searchSpectrum | |
184 | |
185 ## Description : prepare parallel and queuing threads - DEPRECATED | |
186 ## Input : $soap, | |
187 ## Output : $results | |
188 ## Usage : my ( $results ) = thread_and_queue_searchSpectrum( $soap, ) ; | |
189 | |
190 =cut | |
191 ## START of SUB | |
192 sub thread_and_queue_searchSpectrum { | |
193 # my $self = shift; | |
194 # my ( ) = @_; | |
195 # | |
196 # our $THREADS = 10; | |
197 # my $Qwork = new Thread::Queue; | |
198 # my $Qresults = new Thread::Queue; | |
199 # | |
200 # ## Create the pool of workers | |
201 # my @pool = map{ | |
202 # threads->create( \&worker, $Qwork, $Qresults ) | |
203 # } 1 .. $THREADS; | |
204 # | |
205 # ## Get the work items (from somewhere) | |
206 # ## and queue them up for the workers | |
207 # while( my $workItem = getWorkItems() ) { | |
208 # $Qwork->enqueue( $workItem ); | |
209 # } | |
210 # | |
211 # ## Tell the workers there are no more work items | |
212 # $Qwork->enqueue( (undef) x $THREADS ); | |
213 # | |
214 # ## Process the results as they become available | |
215 # ## until all the workers say they are finished. | |
216 # for ( 1 .. $THREADS ) { | |
217 # while( my $result = $Qresults->dequeue ) { | |
218 # | |
219 # ## Do something with the result ## | |
220 # print $result; | |
221 # } | |
222 # } | |
223 # | |
224 # ## Clean up the threads | |
225 # $_->join for @pool; | |
226 } | |
227 ## END of SUB | |
228 | |
229 | |
230 | |
231 1 ; | |
232 | |
233 | |
234 __END__ | |
235 | |
236 =head1 SUPPORT | |
237 | |
238 You can find documentation for this module with the perldoc command. | |
239 | |
240 perldoc XXX.pm | |
241 | |
242 =head1 Exports | |
243 | |
244 =over 4 | |
245 | |
246 =item :ALL is ... | |
247 | |
248 =back | |
249 | |
250 =head1 AUTHOR | |
251 | |
252 Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt> | |
253 | |
254 =head1 LICENSE | |
255 | |
256 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. | |
257 | |
258 =head1 VERSION | |
259 | |
260 version 1 : xx / xx / 201x | |
261 | |
262 version 2 : ?? | |
263 | |
264 =cut |