asyncore.poll() question

Discussion in 'Python' started by chad, Oct 16, 2010.

  1. chad

    chad Guest

    At the following url..

    http://www.nightmare.com/medusa/programming.html

    The author has the following code for a simple HTTP client

    #!/usr/bin/python

    import asyncore
    import socket
    import string

    class http_client (asyncore.dispatcher):

    def __init__ (self, host, path):
    asyncore.dispatcher.__init__ (self)
    self.path = path
    self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    self.connect ((host, 80))

    def handle_connect (self):
    self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    def handle_read (self):
    data = self.recv (8192)
    print data

    def handle_write (self):
    pass

    if __name__ == '__main__':
    import sys
    import urlparse
    for url in sys.argv[1:]:
    parts = urlparse.urlparse (url)
    if parts[0] != 'http':
    raise ValueError, "HTTP URL's only, please"
    else:
    host = parts[1]
    path = parts[2]
    http_client (host, path)
    asyncore.loop()


    Right after that, the author states the following...

    " A really good way to understand select() is to put a print statement
    into the asyncore.poll() function:

    [...]
    (r,w,e) = select.select (r,w,e, timeout)
    print '---'
    print 'read', r
    print 'write', w
    [...]

    Each time through the loop you will see which channels have fired
    which events.
    "

    How the heck do I modify the code put the print statement into the
    asyncore.poll() function?

    Chad
     
    chad, Oct 16, 2010
    #1
    1. Advertising

  2. chad

    Lucasm Guest

    On 16 Okt, 15:31, chad <> wrote:
    > At the following url..
    >
    > http://www.nightmare.com/medusa/programming.html
    >
    > The author has the following code for a simple HTTP client
    >
    > #!/usr/bin/python
    >
    > import asyncore
    > import socket
    > import string
    >
    > class http_client (asyncore.dispatcher):
    >
    >     def __init__ (self, host, path):
    >         asyncore.dispatcher.__init__ (self)
    >         self.path = path
    >         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    >         self.connect ((host, 80))
    >
    >     def handle_connect (self):
    >         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    >
    >     def handle_read (self):
    >         data = self.recv (8192)
    >         print data
    >
    >     def handle_write (self):
    >         pass
    >
    > if __name__ == '__main__':
    >     import sys
    >     import urlparse
    >     for url in sys.argv[1:]:
    >         parts = urlparse.urlparse (url)
    >         if parts[0] != 'http':
    >             raise ValueError, "HTTP URL's only, please"
    >         else:
    >             host = parts[1]
    >             path = parts[2]
    >             http_client (host, path)
    >     asyncore.loop()
    >
    > Right after that, the author states the following...
    >
    > " A really good way to understand select() is to put a print statement
    > into the asyncore.poll() function:
    >
    >         [...]
    >         (r,w,e) = select.select (r,w,e, timeout)
    >         print '---'
    >         print 'read', r
    >         print 'write', w
    >         [...]
    >
    > Each time through the loop you will see which channels have fired
    > which events.
    > "
    >
    > How the heck do I modify the code put the print statement into the
    > asyncore.poll() function?
    >
    > Chad


    Hi,

    You can find the file in your Python directory, in my case /usr/lib/
    Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    is recompiled. And you will need root access :).

    Lucas
     
    Lucasm, Oct 16, 2010
    #2
    1. Advertising

  3. Or download the old source files, and use the asyncore.py that's there.

    2010/10/16, Lucasm <>:
    > On 16 Okt, 15:31, chad <> wrote:
    >> At the following url..
    >>
    >> http://www.nightmare.com/medusa/programming.html
    >>
    >> The author has the following code for a simple HTTP client
    >>
    >> #!/usr/bin/python
    >>
    >> import asyncore
    >> import socket
    >> import string
    >>
    >> class http_client (asyncore.dispatcher):
    >>
    >>     def __init__ (self, host, path):
    >>         asyncore.dispatcher.__init__ (self)
    >>         self.path = path
    >>         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    >>         self.connect ((host, 80))
    >>
    >>     def handle_connect (self):
    >>         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)
    >>
    >>     def handle_read (self):
    >>         data = self.recv (8192)
    >>         print data
    >>
    >>     def handle_write (self):
    >>         pass
    >>
    >> if __name__ == '__main__':
    >>     import sys
    >>     import urlparse
    >>     for url in sys.argv[1:]:
    >>         parts = urlparse.urlparse (url)
    >>         if parts[0] != 'http':
    >>             raise ValueError, "HTTP URL's only, please"
    >>         else:
    >>             host = parts[1]
    >>             path = parts[2]
    >>             http_client (host, path)
    >>     asyncore.loop()
    >>
    >> Right after that, the author states the following...
    >>
    >> " A really good way to understand select() is to put a print statement
    >> into the asyncore.poll() function:
    >>
    >>         [...]
    >>         (r,w,e) = select.select (r,w,e, timeout)
    >>         print '---'
    >>         print 'read', r
    >>         print 'write', w
    >>         [...]
    >>
    >> Each time through the loop you will see which channels have fired
    >> which events.
    >> "
    >>
    >> How the heck do I modify the code put the print statement into the
    >> asyncore.poll() function?
    >>
    >> Chad

    >
    > Hi,
    >
    > You can find the file in your Python directory, in my case /usr/lib/
    > Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    > is recompiled. And you will need root access :).
    >
    > Lucas
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >



    --
    Felipe Bastos Nunes
     
    Felipe Bastos Nunes, Oct 16, 2010
    #3
  4. chad

    chad Guest

    On Oct 16, 6:47 am, Lucasm <> wrote:
    > On 16 Okt, 15:31, chad <> wrote:
    >
    >
    >
    > > At the following url..

    >
    > >http://www.nightmare.com/medusa/programming.html

    >
    > > The author has the following code for a simple HTTP client

    >
    > > #!/usr/bin/python

    >
    > > import asyncore
    > > import socket
    > > import string

    >
    > > class http_client (asyncore.dispatcher):

    >
    > >     def __init__ (self, host, path):
    > >         asyncore.dispatcher.__init__ (self)
    > >         self.path = path
    > >         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    > >         self.connect ((host, 80))

    >
    > >     def handle_connect (self):
    > >         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    >
    > >     def handle_read (self):
    > >         data = self.recv (8192)
    > >         print data

    >
    > >     def handle_write (self):
    > >         pass

    >
    > > if __name__ == '__main__':
    > >     import sys
    > >     import urlparse
    > >     for url in sys.argv[1:]:
    > >         parts = urlparse.urlparse (url)
    > >         if parts[0] != 'http':
    > >             raise ValueError, "HTTP URL's only, please"
    > >         else:
    > >             host = parts[1]
    > >             path = parts[2]
    > >             http_client (host, path)
    > >     asyncore.loop()

    >
    > > Right after that, the author states the following...

    >
    > > " A really good way to understand select() is to put a print statement
    > > into the asyncore.poll() function:

    >
    > >         [...]
    > >         (r,w,e) = select.select (r,w,e, timeout)
    > >         print '---'
    > >         print 'read', r
    > >         print 'write', w
    > >         [...]

    >
    > > Each time through the loop you will see which channels have fired
    > > which events.
    > > "

    >
    > > How the heck do I modify the code put the print statement into the
    > > asyncore.poll() function?

    >
    > > Chad

    >
    > Hi,
    >
    > You can find the file in your Python directory, in my case /usr/lib/
    > Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    > is recompiled. And you will need root access :).
    >
    > Lucas


    I just did that...

    [root@localhost python2.6]# ls -al asyncore.py
    -rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
    [root@localhost python2.6]# ls -al asyncore.pyc
    -rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
    [root@localhost python2.6]# ls -al asyncore.pyo
    -rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
    [root@localhost python2.6]#


    And nothing happened. Ideas?
     
    chad, Oct 16, 2010
    #4
  5. You edited the source of asyncore.py puttin the print statments and
    nothing happend? It should work as the method is called as the page
    you posted said.

    2010/10/16, chad <>:
    > On Oct 16, 6:47 am, Lucasm <> wrote:
    >> On 16 Okt, 15:31, chad <> wrote:
    >>
    >>
    >>
    >> > At the following url..

    >>
    >> >http://www.nightmare.com/medusa/programming.html

    >>
    >> > The author has the following code for a simple HTTP client

    >>
    >> > #!/usr/bin/python

    >>
    >> > import asyncore
    >> > import socket
    >> > import string

    >>
    >> > class http_client (asyncore.dispatcher):

    >>
    >> >     def __init__ (self, host, path):
    >> >         asyncore.dispatcher.__init__ (self)
    >> >         self.path = path
    >> >         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    >> >         self.connect ((host, 80))

    >>
    >> >     def handle_connect (self):
    >> >         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    >>
    >> >     def handle_read (self):
    >> >         data = self.recv (8192)
    >> >         print data

    >>
    >> >     def handle_write (self):
    >> >         pass

    >>
    >> > if __name__ == '__main__':
    >> >     import sys
    >> >     import urlparse
    >> >     for url in sys.argv[1:]:
    >> >         parts = urlparse.urlparse (url)
    >> >         if parts[0] != 'http':
    >> >             raise ValueError, "HTTP URL's only, please"
    >> >         else:
    >> >             host = parts[1]
    >> >             path = parts[2]
    >> >             http_client (host, path)
    >> >     asyncore.loop()

    >>
    >> > Right after that, the author states the following...

    >>
    >> > " A really good way to understand select() is to put a print statement
    >> > into the asyncore.poll() function:

    >>
    >> >         [...]
    >> >         (r,w,e) = select.select (r,w,e, timeout)
    >> >         print '---'
    >> >         print 'read', r
    >> >         print 'write', w
    >> >         [...]

    >>
    >> > Each time through the loop you will see which channels have fired
    >> > which events.
    >> > "

    >>
    >> > How the heck do I modify the code put the print statement into the
    >> > asyncore.poll() function?

    >>
    >> > Chad

    >>
    >> Hi,
    >>
    >> You can find the file in your Python directory, in my case /usr/lib/
    >> Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    >> is recompiled. And you will need root access :).
    >>
    >> Lucas

    >
    > I just did that...
    >
    > [root@localhost python2.6]# ls -al asyncore.py
    > -rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
    > [root@localhost python2.6]# ls -al asyncore.pyc
    > -rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
    > [root@localhost python2.6]# ls -al asyncore.pyo
    > -rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
    > [root@localhost python2.6]#
    >
    >
    > And nothing happened. Ideas?
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >



    --
    Felipe Bastos Nunes
     
    Felipe Bastos Nunes, Oct 16, 2010
    #5
  6. chad

    chad Guest

    On Oct 16, 11:02 am, Felipe Bastos Nunes <>
    wrote:
    > You edited the source of asyncore.py puttin the print statments and
    > nothing happend? It should work as the method is called as the page
    > you posted said.
    >
    > 2010/10/16, chad <>:
    >
    >
    >
    > > On Oct 16, 6:47 am, Lucasm <> wrote:
    > >> On 16 Okt, 15:31, chad <> wrote:

    >
    > >> > At the following url..

    >
    > >> >http://www.nightmare.com/medusa/programming.html

    >
    > >> > The author has the following code for a simple HTTP client

    >
    > >> > #!/usr/bin/python

    >
    > >> > import asyncore
    > >> > import socket
    > >> > import string

    >
    > >> > class http_client (asyncore.dispatcher):

    >
    > >> >     def __init__ (self, host, path):
    > >> >         asyncore.dispatcher.__init__ (self)
    > >> >         self.path = path
    > >> >         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    > >> >         self.connect ((host, 80))

    >
    > >> >     def handle_connect (self):
    > >> >         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    >
    > >> >     def handle_read (self):
    > >> >         data = self.recv (8192)
    > >> >         print data

    >
    > >> >     def handle_write (self):
    > >> >         pass

    >
    > >> > if __name__ == '__main__':
    > >> >     import sys
    > >> >     import urlparse
    > >> >     for url in sys.argv[1:]:
    > >> >         parts = urlparse.urlparse (url)
    > >> >         if parts[0] != 'http':
    > >> >             raise ValueError, "HTTP URL's only, please"
    > >> >         else:
    > >> >             host = parts[1]
    > >> >             path = parts[2]
    > >> >             http_client (host, path)
    > >> >     asyncore.loop()

    >
    > >> > Right after that, the author states the following...

    >
    > >> > " A really good way to understand select() is to put a print statement
    > >> > into the asyncore.poll() function:

    >
    > >> >         [...]
    > >> >         (r,w,e) = select.select (r,w,e, timeout)
    > >> >         print '---'
    > >> >         print 'read', r
    > >> >         print 'write', w
    > >> >         [...]

    >
    > >> > Each time through the loop you will see which channels have fired
    > >> > which events.
    > >> > "

    >
    > >> > How the heck do I modify the code put the print statement into the
    > >> > asyncore.poll() function?

    >
    > >> > Chad

    >
    > >> Hi,

    >
    > >> You can find the file in your Python directory, in my case /usr/lib/
    > >> Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    > >> is recompiled. And you will need root access :).

    >
    > >> Lucas

    >
    > > I just did that...

    >
    > > [root@localhost python2.6]# ls -al asyncore.py
    > > -rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
    > > [root@localhost python2.6]# ls -al asyncore.pyc
    > > -rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
    > > [root@localhost python2.6]# ls -al asyncore.pyo
    > > -rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
    > > [root@localhost python2.6]#

    >
    > > And nothing happened. Ideas?


    I edited the wrong file. Now it works.
     
    chad, Oct 16, 2010
    #6
  7. chad

    chad Guest

    On Oct 16, 11:02 am, Felipe Bastos Nunes <>
    wrote:
    > You edited the source of asyncore.py puttin the print statments and
    > nothing happend? It should work as the method is called as the page
    > you posted said.
    >
    > 2010/10/16, chad <>:
    >
    >
    >
    > > On Oct 16, 6:47 am, Lucasm <> wrote:
    > >> On 16 Okt, 15:31, chad <> wrote:

    >
    > >> > At the following url..

    >
    > >> >http://www.nightmare.com/medusa/programming.html

    >
    > >> > The author has the following code for a simple HTTP client

    >
    > >> > #!/usr/bin/python

    >
    > >> > import asyncore
    > >> > import socket
    > >> > import string

    >
    > >> > class http_client (asyncore.dispatcher):

    >
    > >> >     def __init__ (self, host, path):
    > >> >         asyncore.dispatcher.__init__ (self)
    > >> >         self.path = path
    > >> >         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    > >> >         self.connect ((host, 80))

    >
    > >> >     def handle_connect (self):
    > >> >         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    >
    > >> >     def handle_read (self):
    > >> >         data = self.recv (8192)
    > >> >         print data

    >
    > >> >     def handle_write (self):
    > >> >         pass

    >
    > >> > if __name__ == '__main__':
    > >> >     import sys
    > >> >     import urlparse
    > >> >     for url in sys.argv[1:]:
    > >> >         parts = urlparse.urlparse (url)
    > >> >         if parts[0] != 'http':
    > >> >             raise ValueError, "HTTP URL's only, please"
    > >> >         else:
    > >> >             host = parts[1]
    > >> >             path = parts[2]
    > >> >             http_client (host, path)
    > >> >     asyncore.loop()

    >
    > >> > Right after that, the author states the following...

    >
    > >> > " A really good way to understand select() is to put a print statement
    > >> > into the asyncore.poll() function:

    >
    > >> >         [...]
    > >> >         (r,w,e) = select.select (r,w,e, timeout)
    > >> >         print '---'
    > >> >         print 'read', r
    > >> >         print 'write', w
    > >> >         [...]

    >
    > >> > Each time through the loop you will see which channels have fired
    > >> > which events.
    > >> > "

    >
    > >> > How the heck do I modify the code put the print statement into the
    > >> > asyncore.poll() function?

    >
    > >> > Chad

    >
    > >> Hi,

    >
    > >> You can find the file in your Python directory, in my case /usr/lib/
    > >> Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    > >> is recompiled. And you will need root access :).

    >
    > >> Lucas

    >
    > > I just did that...

    >
    > > [root@localhost python2.6]# ls -al asyncore.py
    > > -rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
    > > [root@localhost python2.6]# ls -al asyncore.pyc
    > > -rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
    > > [root@localhost python2.6]# ls -al asyncore.pyo
    > > -rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
    > > [root@localhost python2.6]#

    >
    > > And nothing happened. Ideas?
    > > --


    One last question.

    Why does the author have both import sys and import urlparse below
    __main__? Ie

    if __name__ == '__main__':
    import sys
    import urlparse

    Why not just put them at the top with the rest?

    Chad
     
    chad, Oct 17, 2010
    #7
  8. chad

    Von Guest

    The urlparse module is load only when this module run as main entry.
    Its for test purpose of modules.


    2010/10/17, chad <>:
    > On Oct 16, 11:02 am, Felipe Bastos Nunes <>
    > wrote:
    >> You edited the source of asyncore.py puttin the print statments and
    >> nothing happend? It should work as the method is called as the page
    >> you posted said.
    >>
    >> 2010/10/16, chad <>:
    >>
    >>
    >>
    >> > On Oct 16, 6:47 am, Lucasm <> wrote:
    >> >> On 16 Okt, 15:31, chad <> wrote:

    >>
    >> >> > At the following url..

    >>
    >> >> >http://www.nightmare.com/medusa/programming.html

    >>
    >> >> > The author has the following code for a simple HTTP client

    >>
    >> >> > #!/usr/bin/python

    >>
    >> >> > import asyncore
    >> >> > import socket
    >> >> > import string

    >>
    >> >> > class http_client (asyncore.dispatcher):

    >>
    >> >> >     def __init__ (self, host, path):
    >> >> >         asyncore.dispatcher.__init__ (self)
    >> >> >         self.path = path
    >> >> >         self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
    >> >> >         self.connect ((host, 80))

    >>
    >> >> >     def handle_connect (self):
    >> >> >         self.send ('GET %s HTTP/1.0\r\n\r\n' % self.path)

    >>
    >> >> >     def handle_read (self):
    >> >> >         data = self.recv (8192)
    >> >> >         print data

    >>
    >> >> >     def handle_write (self):
    >> >> >         pass

    >>
    >> >> > if __name__ == '__main__':
    >> >> >     import sys
    >> >> >     import urlparse
    >> >> >     for url in sys.argv[1:]:
    >> >> >         parts = urlparse.urlparse (url)
    >> >> >         if parts[0] != 'http':
    >> >> >             raise ValueError, "HTTP URL's only, please"
    >> >> >         else:
    >> >> >             host = parts[1]
    >> >> >             path = parts[2]
    >> >> >             http_client (host, path)
    >> >> >     asyncore.loop()

    >>
    >> >> > Right after that, the author states the following...

    >>
    >> >> > " A really good way to understand select() is to put a print
    >> >> > statement
    >> >> > into the asyncore.poll() function:

    >>
    >> >> >         [...]
    >> >> >         (r,w,e) = select.select (r,w,e, timeout)
    >> >> >         print '---'
    >> >> >         print 'read', r
    >> >> >         print 'write', w
    >> >> >         [...]

    >>
    >> >> > Each time through the loop you will see which channels have fired
    >> >> > which events.
    >> >> > "

    >>
    >> >> > How the heck do I modify the code put the print statement into the
    >> >> > asyncore.poll() function?

    >>
    >> >> > Chad

    >>
    >> >> Hi,

    >>
    >> >> You can find the file in your Python directory, in my case /usr/lib/
    >> >> Python2.6/asyncore.py. You should delete the .pyc file to make sure it
    >> >> is recompiled. And you will need root access :).

    >>
    >> >> Lucas

    >>
    >> > I just did that...

    >>
    >> > [root@localhost python2.6]# ls -al asyncore.py
    >> > -rw-r--r-- 1 root root 19262 Oct 16 10:22 asyncore.py
    >> > [root@localhost python2.6]# ls -al asyncore.pyc
    >> > -rw-r--r-- 1 root root 16773 Oct 16 10:26 asyncore.pyc
    >> > [root@localhost python2.6]# ls -al asyncore.pyo
    >> > -rw-r--r-- 1 root root 16773 Oct 16 10:42 asyncore.pyo
    >> > [root@localhost python2.6]#

    >>
    >> > And nothing happened. Ideas?
    >> > --

    >
    > One last question.
    >
    > Why does the author have both import sys and import urlparse below
    > __main__? Ie
    >
    > if __name__ == '__main__':
    > import sys
    > import urlparse
    >
    > Why not just put them at the top with the rest?
    >
    > Chad
    >
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    >
     
    Von, Oct 17, 2010
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Chris
    Replies:
    3
    Views:
    1,297
    Ng Pheng Siong
    Aug 28, 2003
  2. Stéphane Ninin

    asyncore question

    Stéphane Ninin, Sep 12, 2003, in forum: Python
    Replies:
    6
    Views:
    510
    A.M. Kuchling
    Sep 29, 2003
  3. Jos
    Replies:
    1
    Views:
    373
  4. birdsong

    select.poll.poll() never blocks

    birdsong, Feb 12, 2009, in forum: Python
    Replies:
    2
    Views:
    455
    birdsong
    Feb 12, 2009
  5. Jean-Paul Calderone

    Re: select.poll.poll() never blocks

    Jean-Paul Calderone, Feb 12, 2009, in forum: Python
    Replies:
    3
    Views:
    445
    birdsong
    Feb 12, 2009
Loading...

Share This Page