REALLY need help with iterating a list.

Radamand radamand at gmail.com
Mon Jun 11 22:11:23 CEST 2007


On Jun 11, 1:23 pm, Fredrik Lundh <fred... at pythonware.com> wrote:
> infidel wrote:
> > How about something like this?
>
> > while serverlist:
> >     server = serverlist.pop(0)
> >     pinger = ping[server]
> >     if pinger.returncode==None:
> >         pinger.poll()
> >         serverlist.append(server)
> >     else:
> >         pingresult[server] = pinger.stdout.read()
> >         pingreturncode[server] = pinger.returncode
>
> > Basic idea:  as long as there are servers in the list, pop the first
> > one out of the list, see if it's done, and if it isn't, put it back on
> > the end of the list.
>
> here's a simple variation of that, which is a bit more efficient, and
> perhaps also a bit easier to use in the general case:
>
> while serverlist:
>      still_active = []
>      for server in serverlist:
>         pinger = ping[server]
>         if pinger.returncode is None:
>             pinger.poll()
>             still_active.append(server)
>         else:
>             pingresult[server] = pinger.stdout.read()
>             pingreturncode[server] = pinger.returncode
>      serverlist = still_active
>
> </F>

Thats an interesting approach but, if the returncode for a given
server is None say, 20 times in a row you will have append'ed that
server to the list 20 times, i suppose you could check the list to see
if its already there but thats a bit kludgey...

also, the line "pinger = ping[server]" would have to be extracted from
this loop otherwise your going to ping the same server repeatedly
until it answers...




More information about the Python-list mailing list