Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7788381
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 1, 20262026-06-01T20:58:53+00:00 2026-06-01T20:58:53+00:00

Now i am studying how to fetch data from website as fast as possible.

  • 0

Now i am studying how to fetch data from website as fast as possible. To get faster speed, im considering using multi-thread. Here is the code i used to test the difference between multi-threaded and simple post.

import threading
import time
import urllib
import urllib2


class Post:

    def __init__(self, website, data, mode):
        self.website = website
        self.data = data

        #mode is either "Simple"(Simple POST) or "Multiple"(Multi-thread POST)
        self.mode = mode

    def post(self):

        #post data
        req = urllib2.Request(self.website)
        open_url = urllib2.urlopen(req, self.data)

        if self.mode == "Multiple":
            time.sleep(0.001)

        #read HTMLData
        HTMLData = open_url.read()



        print "OK"

if __name__ == "__main__":

    current_post = Post("http://forum.xda-developers.com/login.php", "vb_login_username=test&vb_login_password&securitytoken=guest&do=login", \
                        "Simple")

    #save the time before post data
    origin_time = time.time()

    if(current_post.mode == "Multiple"):

        #multithreading POST

        for i in range(0, 10):
           thread = threading.Thread(target = current_post.post)
           thread.start()
           thread.join()

        #calculate the time interval
        time_interval = time.time() - origin_time

        print time_interval

    if(current_post.mode == "Simple"):

        #simple POST

        for i in range(0, 10):
            current_post.post()

        #calculate the time interval
        time_interval = time.time() - origin_time

        print time_interval

just as you can see, this is a very simple code. first i set the mode to “Simple”, and i can get the time interval: 50s(maybe my speed is a little slow :(). then i set the mode to “Multiple”, and i get the time interval: 35. from that i can see, multi-thread can actually increase the speed, but the result isnt as good as i imagine. i want to get a much faster speed.

from debugging, i found that the program mainly blocks at the line: open_url = urllib2.urlopen(req, self.data), this line of code takes a lot of time to post and receive data from the specified website. i guess maybe i can get a faster speed by adding time.sleep() and using multi-threading inside the urlopen function, but i cannot do that because its the python’s own function.

if not considering the prossible limits that the server blocks the post speed, what else can i do to get the faster speed? or any other code i can modify? thx a lot!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-01T20:58:54+00:00Added an answer on June 1, 2026 at 8:58 pm

    In many cases, python’s threading doesn’t improve execution speed very well… sometimes, it makes it worse. For more information, see David Beazley’s PyCon2010 presentation on the Global Interpreter Lock / Pycon2010 GIL slides. This presentation is very informative, I highly recommend it to anyone considering threading…

    Even though David Beazley’s talk explains that network traffic improves the scheduling of Python threading module, you should use the multiprocessing module. I included this as an option in your code (see bottom of my answer).

    Running this on one of my older machines (Python 2.6.6):

    current_post.mode == "Process"  (multiprocessing)  --> 0.2609 seconds
    current_post.mode == "Multiple" (threading)        --> 0.3947 seconds
    current_post.mode == "Simple"   (serial execution) --> 1.650 seconds
    

    I agree with TokenMacGuy’s comment and the numbers above include moving the .join() to a different loop. As you can see, python’s multiprocessing is significantly faster than threading.


    from multiprocessing import Process
    import threading
    import time
    import urllib
    import urllib2
    
    
    class Post:
    
        def __init__(self, website, data, mode):
            self.website = website
            self.data = data
    
            #mode is either:
            #   "Simple"      (Simple POST)
            #   "Multiple"    (Multi-thread POST)
            #   "Process"     (Multiprocessing)
            self.mode = mode
            self.run_job()
    
        def post(self):
    
            #post data
            req = urllib2.Request(self.website)
            open_url = urllib2.urlopen(req, self.data)
    
            if self.mode == "Multiple":
                time.sleep(0.001)
    
            #read HTMLData
            HTMLData = open_url.read()
    
            #print "OK"
    
        def run_job(self):
            """This was refactored from the OP's code"""
            origin_time = time.time()
            if(self.mode == "Multiple"):
    
                #multithreading POST
                threads = list()
                for i in range(0, 10):
                   thread = threading.Thread(target = self.post)
                   thread.start()
                   threads.append(thread)
                for thread in threads:
                   thread.join()
                #calculate the time interval
                time_interval = time.time() - origin_time
                print "mode - {0}: {1}".format(method, time_interval)
    
            if(self.mode == "Process"):
    
                #multiprocessing POST
                processes = list()
                for i in range(0, 10):
                   process = Process(target=self.post)
                   process.start()
                   processes.append(process)
                for process in processes:
                   process.join()
                #calculate the time interval
                time_interval = time.time() - origin_time
                print "mode - {0}: {1}".format(method, time_interval)
    
            if(self.mode == "Simple"):
    
                #simple POST
                for i in range(0, 10):
                    self.post()
                #calculate the time interval
                time_interval = time.time() - origin_time
                print "mode - {0}: {1}".format(method, time_interval)
            return time_interval
    
    if __name__ == "__main__":
    
        for method in ["Process", "Multiple", "Simple"]:
            Post("http://forum.xda-developers.com/login.php", 
                "vb_login_username=test&vb_login_password&securitytoken=guest&do=login",
                method
                )
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

First, sorry for my poor language. I'm using VC++ Express myself. Now I'm studying
I'm studying C++ right now, coming from a background in Python, and I'm having
I'm now studying Fundamentals Of Data Structures in C++ written by Ellis Horowitz ,
I am studying C++ now. I am trying to study it from this link
I'm now studying Emacs Lisp from the reference manual and Common Lisp from a
I'm studying Spring 3 and I'm using it in a simple web-application. Now I'm
I've been studying Core Data quite a bit now, and I've now decided it's
I am now studying C++. I want a makefile which will compile all of
I'm studying string searching algorithms now and wondering what algorithm is used for .NET
I have been studying unicode and its Python implementation now for two days, and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.