calling class methods from class methods, help?

O

Oltmans

I've a multithreaded program in which I've to call class methods from
class methods. Here is how my code look like (excluding imports),. Any
help is highly appreciated.

#!/usr/bin/env python
class Requests(Thread):

def __init__(self, times):
Thread.__init__(self)
self.times=times
self.name=''
def run(self):

sites=['example.com','example1.com']
for i in range(0,self.times):
for site in sites:
self.name = site
self.html=SendRequest() # This line throws an error

def SendRequest(self): #A class method
# it sends a request to website using mechanize library

def startThis(times,reqs):

threads=[]
for i in range (0,reqs):
owner=Requests(times)
owner.start()
threads.append(owner)

for thread in threads:
thread.join()

if __name__=="__main__":
#I want to create 2 threads, each of them will execute twice. At
least that is the intention.
startThis(2,2)
 
M

MRAB

Oltmans said:
I've a multithreaded program in which I've to call class methods from
class methods. Here is how my code look like (excluding imports),. Any
help is highly appreciated.

#!/usr/bin/env python
class Requests(Thread):

def __init__(self, times):
Thread.__init__(self)
self.times=times
self.name=''
def run(self):

sites=['example.com','example1.com']
for i in range(0,self.times):
for site in sites:
self.name = site
self.html=SendRequest() # This line throws an error
Should be:
self.html = self.SendRequest()
def SendRequest(self): #A class method
# it sends a request to website using mechanize library

def startThis(times,reqs):

threads=[]
for i in range (0,reqs):
owner=Requests(times)
owner.start()
threads.append(owner)

for thread in threads:
thread.join()

if __name__=="__main__":
#I want to create 2 threads, each of them will execute twice. At
least that is the intention.
startThis(2,2)
 
C

Chris Rebert

I've a multithreaded program in which I've to call class methods from
class methods.

Um, those are instance methods, not class methods. Class methods take
the class itself as an argument (the parameter is typically named
"cls" instead of "self") and are defined with the help of the
classmethod() function, which is not the case in your code.

Cheers,
Chris
 
P

Piet van Oostrum

Oltmans said:
O> I've a multithreaded program in which I've to call class methods from
O> class methods. Here is how my code look like (excluding imports),. Any
O> help is highly appreciated.
O> #!/usr/bin/env python
O> class Requests(Thread):
O> def __init__(self, times):
O> Thread.__init__(self)
O> self.times=times
O> self.name=''
O> def run(self):
O> sites=['example.com','example1.com']
O> for i in range(0,self.times):
O> for site in sites:
O> self.name = site
O> self.html=SendRequest() # This line throws an error

self.html=self.SendRequest()
 
T

Terry Reedy

Oltmans said:
I've a multithreaded program in which I've to call class methods from
class methods. Here is how my code look like (excluding imports),. Any
help is highly appreciated.

#!/usr/bin/env python
class Requests(Thread):

def __init__(self, times):
Thread.__init__(self)
self.times=times
self.name=''
def run(self):

sites=['example.com','example1.com']
for i in range(0,self.times):
for site in sites:
self.name = site
self.html=SendRequest() # This line throws an error

You should (almost) always display the error traceback. I suspect
NameError: global 'SendRequest' not found. You need
Requests.SendRequest. but...
def SendRequest(self): #A class method

If it were, then call the parameter 'cls', not 'self'. But it is not a
classmethod without @classmethod decorator. but...
# it sends a request to website using mechanize library

Does this need to send the class rather than instance object to the
website? If not, better to leave it an instance method and use
self.SendRequest above. If the request uses instance variables, then it
*must* be an instance method!
def startThis(times,reqs):

threads=[]
for i in range (0,reqs):
owner=Requests(times)
owner.start()
threads.append(owner)

for thread in threads:
thread.join()

if __name__=="__main__":
#I want to create 2 threads, each of them will execute twice. At
least that is the intention.
startThis(2,2)
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top